c的字符计数问题

这是一段用来计算输入字符数量的代码

#include <stdio.h>

main()
{
    double nc;
    
    for (nc = 0; getchar() != EOF; ++nc);
    printf("%.0f\n", nc);
}

这是我的测试
图片描述

我输入了123然后ctrl+Z(EOF),之后我继续输入了123,回车,再次ctrl+Z,再回车。
结果是输出了一个4。

然而我认为结果应该是3,因为第一次的123是3个字符,然后ctrl+Z也就是EOF。

现在有两个疑问:
1.输出结果的4里面的第四个字符是我之前输入的哪一个?
2.为什么在我输出第一个ctrl+Z再回车之后程序没结束,而是当我换行敲第二个ctrl+Z再回车之后程序才结束?

问题比较长,先谢谢了。

阅读 2.9k
1 个回答

参考http://www.360doc.com/content/13/0929/19/9206388_318021611.shtml
主要是Windows的设计,当第一次输入^Z的时候,会在缓冲区中加入一个\26(ASCII码的26号字符,这就是你读到的第4个字符),而第二次输入^Z时,会检查缓存区的最后一个字符是否是\26,如果是的话就返回EOF

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进