如何检查输入结束? C,找到​​42

时间:2014-01-11 14:38:08

标签: c loops input

这就是问题:
你的程序是使用蛮力方法来找到生命,宇宙和万物的答案。更确切地说......从输入到输出重写小数字。读取数字42后停止处理输入。输入的所有数字都是一位或两位数的整数。

输入:
1
2
88个
42个
99个

我的第一段代码不起作用:

while( scanf("%d\n", &n) != 42 ){
    printf("%d\n",n);
}
第二个代码,带有for循环,但是有一个测试用例没有数字42所以它返回TLE,我如何检查输入结束?

for(i=1;i>0;i++){
    scanf("%d\n",&n);
    if(n!=42 ){       /* end of input??? */
        printf("%d\n",n);
    }
    else {
        break;
    }
}

为什么循环工作不应该如此?

2 个答案:

答案 0 :(得分:2)

scanf返回扫描的字符数,而不是结果。

所以,写while while循环如下:

scanf("%d", &n);
while( n != 42 ){
    printf("%d\n",n);
    scanf("%d", &n);
}

答案 1 :(得分:1)

总是很好避免魔术数字。定义常量。

检查scanf()(@Joachim Pileborg)的结果

要检查输入是否有效,请测试scanf()结果是否为1(正确扫描1个格式说明符)。

要检查输入结束,请测试scanf()结果是否为EOF。

@dbasic很好地解释了

while循环失败。粗略地,scanf()报告扫描的字段数,而不是扫描的

scanf()有很多。如果是这样,请阅读C规范的scanf()部分。 Where do I find the current C or C++ standard documents?

const int Answer_to_Life_the_Universe_and_Everything = 42;
int n;
int cnt;
// Use 2d to limit to 2 digits
while ((cnt = scanf("%2d\n",&n)) == 1) {  
  if(n != Answer_to_Life_the_Universe_and_Everything) {   /* end of input? */
    printf("%d\n",n);
  }
  else {
    break;
  }
}
if (cnt != EOF) Handle_UnexpectedInput();  // example someone type in "junk"