【问题标题】:How to solve this code? [closed]如何解决此代码? [关闭]
【发布时间】:2013-05-17 18:07:25
【问题描述】:

输入说明:

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

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

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

int main()
{
    int n0;

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

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

【问题讨论】:

  • 你的标题非常糟糕。
  • scanf 返回成功转化的次数。你需要检查n0的值。
  • 我猜酒吧信标比做功课更能帮助你为你的职业生涯学习一些东西!
  • 您是否阅读了您在上一个(相同)问题中得到的 cmets? stackoverflow.com/questions/16614958/…
  • 是的,这是我的第一篇文章……

标签: c input


【解决方案1】:
while (1) {
  scanf("%d", &n0);
  if (n0==0) break;
  ...
}

【讨论】:

  • 那么你应该使用接受按钮。欢迎使用 stackoverflow!
【解决方案2】:

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

您想检测您的值何时为零,然后跳出循环。

【讨论】:

  • 好的,谢谢。明白了:)
【解决方案3】:

这是使用 C 中很少被记住的运算符之一“,”或排序运算符的理想场所。这是您重写的代码以使用它:

#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。请注意,这不是“与”或“或”运算符(您可以通过检查下面的示例输出来确定) - 执行 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

分享和享受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多