繁体   English   中英

C 一行多输入

[英]C Multiple Input in One Line

我正在使用 Code chef 上的代码“DOLL”解决问题“Red Light Green Light”。

代码厨师:红灯绿灯

在这个问题中,我需要在一行中接受 N 个输入。 我尝试使用 scanf() 但无济于事,它没有用。 它在 N 行中谈论 N 个输入,这不是我想要的。 我尝试使用 fgets 和 strtok。 但是出现了一些我不理解的错误。 那么我该怎么做呢?

void main(){
    int T,N,K,sum_N=0;
    int test_arr[N];
    char name;
    char *token;
    scanf("%d",&T);
    if(T<0||T>100000) printf("Wrong Input Cases");  // Condition Checking for T
    if(sum_N>500000) printf("Exceeded Sum");    //Condition Checking for sum of N
    while(T--){
        scanf("%d %d",&N,&K);
        if((N||K)<0||(N||K)>100000) printf("Wrong Values"); //Conditon Checking for N and K
        // Here N Input in one Line are taken
        fgets(name,sizeof(name),stdin);
        token = strtok(name," ");
        for(int i=0;i<N;i++){
            test_arr[i] = *(token+i);
        }

        int ctr=0;
        for(int i=0;i<N;i++){
            if(test_arr[i]>K) ctr++;
        }
        printf("%d",ctr);
    }
}

错误

你需要问自己几个问题:

  • 您是否需要检查“无效”输入,并拒绝输入分成多行的情况。
  • 您是否需要在事先不知道应该有多少的情况下读取一行输入中的所有数字?

如果这两个问题的答案都是no ,那么就没有理由检查或关心一行中的内容与另一行中的内容。 只需使用 scanf 读取数字,不用担心间距或哪一行是什么。

scanf("%d", &test_cases);   // number of test cases
for (int i = 0; i < test_cases; ++i) {
    scanf("%d%d", &N, &height);  // number of values and boundary height
    int val[N];
    for (j = 0; j < N; ++j)
        scanf("%d", &val[j]);

请注意,scanf 格式字符串中永远不会有任何空格或换行符。 您不需要它们,它们可能会造成混乱。 你只读数字。 如果您多疑,可以检查 scanf 的返回值——它应该始终是读取的项目数(上面 3 次调用中的 1、2 或 1),但如果不是,那么您唯一有用的东西能做的就是打印错误信息并退出。

如果您确实需要关心换行符(最常见的原因是您不知道一行中有多少数字),请使用 fgets + sscanf:

char buffer[MAXLINE];  // buffer big enough for the largest line
int vals[MAXVALS];     // array large enough for the maximum number of vals
char *p = fgets(buffer, sizeof(buffer));    // read a line
int N = 0, len;
while (N < MAXVALS && sscanf(p, "%d%n", &vals[N], &len) == 1) {
    p += len;
    ++N; }

更改char name; char name[1024]; 或类似的东西。 char name; 不是字符串而是单个字符。 fgetsstrtok正在寻找指向字符串的指针,但得到的是字符变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM