我是C编程语言的新手。
如果输入为EOF
或-1。
该计划如下:
#include <stdio.h>
int main() {
double nc;
for (nc = 0; getchar() != EOF; ++nc) {
printf("%.0f\n", nc);
}
}
根据我的理解,如果我在终止中输入EOF
或-1,则for循环将停止,因为-1或EOF
使条件为假。
关于同一个例子还有一个问题:如果我不使用嵌套循环代码如下:
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f", nc);
没有任何错误或警告,但似乎函数printf
无法按预期工作。它只输出我输入的内容。
答案 0 :(得分:3)
您的程序将在文件末尾停止,这是EOF
表示的内容。
要从终端输入文件结尾,请在unix或Mac / OS上键入 Ctrl-D ,然后在 Ctrl-Z Enter 上输入 Windows系统。
Ctrl-D 是通过按 Ctrl 然后 D 获得的,同时按住 Ctrl 键。
请注意,double
变量不适用于简单的计数器,您应该使用int
类型。
另请注意,程序一次不会收到一个字符的输入:从终端读取时可以以行为单位进行缓冲,在从文件读取时可以以块为单位进行缓冲。发布后,您的程序将从终端读取一行输入,并一次输出多行输出,每个输入一个字符,包括换行符。
答案 1 :(得分:1)
EOF
不是您可以输入的内容,而是文件描述符所在的状态。
要在控制台上实现此状态,如果您正在运行类似unix的系统,则必须按 Ctrl + D 。
或者,如果您通过输入文件来运行您的应用程序,您会发现一旦读取到文件末尾,您的应用程序就会停止。
./my_app < some_file.txt
此外,我建议您使用整数类型来计算循环迭代,例如int
或size_t
。浮点类型不太适合这种情况。
答案 2 :(得分:0)
你误解了......
如果您在控制台中输入EOF或-1,您将获得这些字符串:"EOF", "-1"
。如果你逐个字符地阅读它们,你将得到序列'E', 'O', 'F'
和'-', '1'
(数值,ASCII / UTF-8分别提供:69,79,70和45,49),但绝不是EOF(-1)的数值。
如何真正进入EOF:看到chqrlie的答案,谁比我快......