我正在读PrenticeHall.C编程语言 - 第二版Ed.Kernighan,Ritchie.
在本书(pg-20)中给出了一个程序示例,该程序应该打印用户在控制台窗口中键入的字符数,这是它的代码.
#include <stdio.h>
main()
{
double nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它并在控制台中键入内容时,它根本不打印任何东西,光标会一直闪烁.这正是该书中编写代码的方式.
我也尝试过另一种方式,但这也没有成功,结果与之前的代码相同.
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
有关如何使这件事有用的任何想法?
PS我正在使用Windows操作系统.(仍然)
原因是代码尝试读取所有输入,直到文件结束.如果这个程序是从一个文件读取的,它会知道它何时结束,但是因为它是从控制台读取的,你必须明确地告诉它输入结束了.在Linux上,您可以通过^D在Windows上按(Ctrl + D)^Z(Ctrl + Z)来完成此操作.
请注意,它必须在新行的开头处完成,即在按下之后Enter,按^D(^Z在Win上).
我正在读PrenticeHall.Ansi C编程语言 - 第二版Ed.Kernighan,Ritchie.
那是你读的一本非常好的书.这很好,我想,它包含了你的问题的答案.
您的两个程序都可以正常工作,您只需EOF按照我在问题下方的第一条评论中的说明输入即可.那就是^DLinux下的(Control-D)和^ZWindows下的(Control-Z).
请注意循环中的两个条件都在查找EOF不是或要终止的其他输入.提供此输入后,循环终止并显示计数.