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编程语言书中的一些代码示例不能按预期工作?_C - Fatal编程技术网

为什么C编程语言书中的一些代码示例不能按预期工作?

为什么C编程语言书中的一些代码示例不能按预期工作?,c,C,我正在努力学习C语言,我正在阅读和测试很多关于C语言的知识,但有时很难理解为什么有些东西不能像预期的那样工作。为什么C编程语言第18页第二版Kernighan和Ritchie上的示例代码不起作用?这对我来说没有任何结果 #include <stdio.h> main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf ("%ld\n", nc); } 它没有显示任何内容

我正在努力学习C语言,我正在阅读和测试很多关于C语言的知识,但有时很难理解为什么有些东西不能像预期的那样工作。为什么C编程语言第18页第二版Kernighan和Ritchie上的示例代码不起作用?这对我来说没有任何结果

#include <stdio.h>
main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf ("%ld\n", nc);
}

它没有显示任何内容,因为它正在等待输入

如果像./u可执行文件那样运行,它将始终读取您的输入,因为getchar。它只会在输入流结束后显示结果

您可以按Control+D手动将其切断。或使用文件内容作为输入:

./the_executable < test_file.txt

它确实应该如预期的那样起作用

之所以将其与不工作混淆,是因为您希望printf为您的nc值打印一些内容,但关键是printf之前还有另一条语句getchar,它在while循环的帮助下读取标准输入,直到您输入EOF,EOF由unix中的^D control+D输入,就像在*nix上使用cat命令,或者通过使用C编程语言将输入从文件重定向到程序一样,Brian Kernighan和Dennis Ritchie的第二版是一本非常好的书,但它非常古老,引用了C语言的过时定义。您发布的程序对main使用了过时的语法。应修改为:

包括 int main{ 长nc; nc=0; 而getchar!=EOF ++数控; printf%ld\n,nc; 返回0; } 正如您所看到的,差异是最小的,在这个特定的情况下,上面的版本也将使用本书编写时使用的前ansi编译器进行编译

程序从标准输入中读取字节,并计算在到达文件末尾之前可以读取的字节数

在linux和OS/X等unix系统上按Ctrl和D键,或在Microsoft系统上按Ctrl和Z键,然后按Enter键,可以从终端窗口运行此程序,键入一些数据并发出文件结束的信号

您还可以重定向文件中的输入,并将获得该文件中的字节数,在Microsoft系统上可能会由于行结束转换而进行调整


直接从IDE运行程序并不具有说明性,因为当程序退出时,IDE通常不会保持终端窗口打开,从而阻止用户看到最终输出。

您是如何使用该程序的?该程序从标准输入读取,因此您需要给它一些可读的内容,像a.out./a.out < someFile.txt