Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从控制台读取数据不需要';我按Enter键时不会停止_C - Fatal编程技术网

C 从控制台读取数据不需要';我按Enter键时不会停止

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) ;

我在读《婚前情人》第二版,克尼汉,里奇

在本书(pg-20)中,给出了一个程序示例,该程序应打印用户在控制台窗口中键入的字符数,以下是其代码

#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也可以,现在我知道它为什么以前不工作了。:-)