c/c++语言开发共享关于C的K&R书中的示例1.5.2的问题

我正在用K&R教自己C,并且被本书中的一个例子所困扰。 我完全按照示例中编写的方式编译代码,但它不会像作者所说的那样做。 该程序应该计算字符数。 给出的代码如下:

#include  /* count characters in input; 1st version */ main() { long nc; nc=0; while (getchar() != EOF) ++nc; printf("%ldn", nc); } 

为了编译它我用int main()替换main()。 但我认为这与问题无关。 该程序编译并运行正常。 但它根本不计算字符,因为它是写的。 我错过了什么吗? 自从本书出版以来,现代编译器如何处理代码示例这样的事情会有所改变吗? 任何有关此留言板上的好人可能提供的帮助将不胜感激。

最好,丹

    程序在读取“文件结束”后才输出字符数。 使用交互式输入,您可以通过ctrl + d生成“文件结束”(至少在* NIX上,不知道窗口)。 知道这一点,程序在这里正常工作。

    虽然其他答案在技术上是正确的,但我觉得这个例子(1.5.2)和下面的例子(1.5.3)在教学上是混乱的。 只是谷歌“字符计数1.5.2”,你会发现许多其他人被这个例子赶上了,就像OP一样。 它之所以令人困惑的原因是文本中没有解释如何在交互模式下生成EOF字符,并且前面的例子在输入“return”后立即输出结果。 因此,任何C语言的初学者都会认为1.5.3中的程序应该这样做……

    我想提出以下替代代码,它产生预期的结果:

     #include  #define EOL 'n' main() { long nc; int c; nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == EOL) { /* Print number of input characters (not including return character) */ printf("%ldn", nc-1); nc = 0; } } } 

    文中尚未解释的唯一C元素是if语句,实际上将在下一节(1.5.3)中进行解释。 我希望这个小的替代例子可以帮助那些被K&R书中的原始例子所吸引的人。 一个好的“练习1.7b”将检查两个版本之间的差异并解释validation它们输出相同的结果(在阅读其他答案的Ctrl D / Ctrl Z之后 )。

    除了main的返回值,它看起来还不错。

    如果从键盘输入值,是否在输入结束时执行Ctrl D (Unix)或Ctrl Z (Windows)?

    值得注意的是,Ctrl + z(在控制台中显示为^ Z)不能简单地输入控制台输入中的任何位置; 您必须输入它作为最后一行字符串/文本/字符的第一个输入。 例如

    初始输入Ctrl + z的图片

    正如你在本例中所见,我输入了随机文本,在每行结束后,我按下了回车键。 现在这是重要的!!! 当您在最后一行按Enter键时,它将调用EOF(文件结束),您将使其余代码执行,就像它最初打算发生的那样。

    完全执行的代码

    注意:

    来源: Windows命令提示符中的EOF不终止输入流

    需要了解更多c/c++开发分享关于C的K&R书中的示例1.5.2的问题,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享关于C的K&R书中的示例1.5.2的问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979419.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐