【发布时间】:2012-11-25 07:19:55
【问题描述】:
我有一个 while 循环,它扫描输入的整数集。它扫描并打印最后带有“...”的所有数字,然后跳到下一行。但是,该脚本不会:在 while 循环之后执行并打印 TEST。
例如,我输入: 3 44 62 1
它打印: 3...
44...
62...
1...
何时打印: 3...
44...
62...
1...
测试
while(scanf("%d", &n) != -1) {
x[i] = n;
i++;
printf("%d", n);
printf("...\n");
}
printf("TEST");
我做错了什么?
【问题讨论】:
-
什么是
-1?-1是从哪里来的?为什么您希望您的scanf在输入结束时返回-1?换句话说,你为什么希望这段代码按照你想要的方式工作? -
-1 由 scanf() 返回以表示字符结束。它在那时停止读取整数。
-
首先,没有“字符结尾”这样的东西吗?其次,
fscanf在文件结束处返回EOF。不是-1,而是EOF。第三,scanf从标准输入读取,当它从键盘读取时,它永远不会结束。您可以通过与系统相关的方式(如 Ctrl+D 或 Ctrl+Z)在标准键盘输入中“模拟”文件结束条件。但是没有它,仅仅因为您停止输入它并不意味着您的输入结束。scanf将永远等待更多输入,这正是您的情况。 -
在 EOF 处多次返回 -1,但并非总是如此。据我所知,在 C 中,实际规范只是它返回一个小于 0 的数字
-
我记得,EOF 只需要不等于任何其他字符值。无论如何,当你的意思是
EOF时写-1是非常糟糕的风格。
标签: c while-loop int scanf