C 从控制台读取数据不需要';我按Enter键时不会停止
我在读《婚前情人》第二版,克尼汉,里奇 在本书(pg-20)中,给出了一个程序示例,该程序应打印用户在控制台窗口中键入的字符数,以下是其代码C 从控制台读取数据不需要';我按Enter键时不会停止,c,C,我在读《婚前情人》第二版,克尼汉,里奇 在本书(pg-20)中,给出了一个程序示例,该程序应打印用户在控制台窗口中键入的字符数,以下是其代码 #include <stdio.h> main() { double nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%.0f\n", nc); } #包括 main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc) ;
#include <stdio.h>
main()
{
double nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f\n", nc);
}
#包括
main()
{
双数控;
对于(nc=0;getchar()!=EOF;++nc)
;
printf(“%.0f\n”,nc);
}
但是当我运行这个,在控制台中输入一些东西时,它根本不会打印任何东西,光标会一直闪烁。
这就是那本书中代码的编写方式
我也尝试过另一种方法,但也没有成功,结果与前面的代码相同
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
#包括
main()
{
长nc;
nc=0;
while(getchar()!=EOF)
++数控;
printf(“%ld\n”,nc);
}
有什么办法可以让这玩意儿工作吗
附言。
我正在使用windows操作系统。(仍然)原因是代码试图读取所有输入,直到文件结束。如果这个程序正在读取一个文件,它会知道它什么时候结束,但因为它是从控制台读取的,所以您必须明确地告诉它输入结束了。在Linux上,您可以按
^D
(Ctrl+D),在Windows上按^Z
(Ctrl+Z)
请注意,必须在新行开始时执行此操作,即在按Enter
后,按^D
(^Z
打开Win)
我在读《婚前协议》。Ansi C编程语言-第2版
Ed.Kernighan,里奇
你正在读一本很好的书。很好,我想,它包含了您问题的答案。原因是代码试图读取所有输入,直到文件结束。如果这个程序正在读取一个文件,它会知道它什么时候结束,但因为它是从控制台读取的,所以您必须明确地告诉它输入结束了。在Linux上,您可以按
^D
(Ctrl+D),在Windows上按^Z
(Ctrl+Z)
请注意,必须在新行开始时执行此操作,即在按Enter
后,按^D
(^Z
打开Win)
我在读《婚前协议》。Ansi C编程语言-第2版
Ed.Kernighan,里奇
你正在读一本很好的书。很好,我想,它包含了你问题的答案。你的两个程序都能工作,你只需要输入
EOF
,正如我在你问题下面的第一条评论中所指出的那样。即Linux下的^D
(Control-D)和Windows下的^Z
(Control-Z)
请注意,循环中的两个条件都在寻找
EOF
not或某个其他输入终止。一旦您提供了此输入,循环将终止并显示您的计数。您的两个程序都工作,您只需输入EOF
,正如我在问题下方的第一条注释中所指出的那样。即Linux下的^D
(Control-D)和Windows下的^Z
(Control-Z)
请注意,循环中的两个条件都在寻找
EOF
not或某个其他输入终止。一旦你提供了这个输入,循环就终止了,你的计数也会显示出来。你应该停止输入“EOF”字符(GNU/Linux上的Ctrl+D)。你应该停止输入“EOF”字符(GNU/Linux上的Ctrl+D)。我的编译器(GCC 4.4)对你发布的代码吹毛求疵。这消除了诡辩:
#include <stdio.h>
int main()
{
int nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%d\n", nc);
return 0;
}
#包括
int main()
{
int nc;
对于(nc=0;getchar()!=EOF;++nc)
;
printf(“%d\n”,nc);
返回0;
}
不过,其他答案是正确的:您必须使用Ctrl-D或-Z结束键盘输入
顺便提一句,我不知道克尼汉和里奇为什么在这种情况下使用了double
。我的编译器(GCC 4.4)对您发布的代码提出质疑。这消除了诡辩:
#include <stdio.h>
int main()
{
int nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%d\n", nc);
return 0;
}
#包括
int main()
{
int nc;
对于(nc=0;getchar()!=EOF;++nc)
;
printf(“%d\n”,nc);
返回0;
}
不过,其他答案是正确的:您必须使用Ctrl-D或-Z结束键盘输入
顺便提一句,我不知道克尼汉和里奇为什么在这种情况下使用了
double
。如何结束这个程序?什么操作系统。。您是否分别在Linux/Unix和Windows下键入^D或^Z?感谢@hmjd使用getchar()!='\n'使用enter键,@SauravTomar,它仍然可以使用EOF
,只是需要一些理解。@unkulunkulu它使用EOF也可以,现在我知道它为什么以前不工作了。:-)你如何结束这个节目?什么操作系统。。您是否分别在Linux/Unix和Windows下键入^D或^Z?感谢@hmjd使用getchar()!='\n'使用enter键,@SauravTomar,它仍然可以使用EOF
,只是需要一些理解。@unkulunkulu它使用EOF也可以,现在我知道它为什么以前不工作了。:-)