如何解决这段代码?

时间:2013-05-17 18:07:26

标签: c input

输入说明:

  

您的程序将在一个或多个测试用例上进行测试。每个测试用例由单个正数(0      

输入文件的最后一行有一个零(不是测试用例的一部分。)

我刚刚输入了这样的代码:

int main()
{
    int n0;

    while((scanf("%d", &n0)) != 0)
    {
    ..........
    }

但为什么输入0仍然处理?

3 个答案:

答案 0 :(得分:1)

while (1) {
  scanf("%d", &n0);
  if (n0==0) break;
  ...
}

答案 1 :(得分:1)

0仍然处理,因为scanf的返回值是它填充的项目数。如果输入文件以0结尾,它将返回1 - 而不是零。

你想要检测你的值何时为零,然后突破循环。

答案 2 :(得分:0)

这是一个使用C&C很少记忆的操作员之一的完美场所,",#34;或排序操作员。这里重写了您的代码以便使用它:

#include <stdio.h>

int main()
  {
  char *str[] = { "123", "456", "789", "0" };
  int i = 0;
  int n0;
  int scanret;

  while((scanret = sscanf(str[i], "%d", &n0)), n0 != 0)
    {
    printf("i = %d  n0 = %d  scanret = %d\n", i, n0, scanret);
    i += 1;
    }

    printf("i = %d  n0 = %d  scanret = %d  after loop termination\n", i, n0, scanret);
  }

查看while循环的条件。这里发生的是首先评估sscanf,然后评估测试n0 != 0。请注意,这不是&#39;和&#39;或者&#39;或&#39;运算符(您可以通过检查下面的示例输出来确定) - 执行sscanf,然后将n0 != 0的结果用作while循环的测试,因为while使用了在条件中评估的最后一个表达式的值作为条件的值。

如果你运行它,你将获得类似于:

的输出
i = 0  n0 = 123  scanret = 1
i = 1  n0 = 456  scanret = 1
i = 2  n0 = 789  scanret = 1
i = 3  n0 = 0    scanret = 1  after loop termination

分享并享受。