我是一个初级程序员(请原谅这个非常基本的问题),我正在通过Kernighan和Ritchie的书“C编程语言”学习C。
我从书中复制了这个程序,它编译得很好,但是当输入时,程序什么也不做。
#include <stdio.h>
int main() {
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}输出应该是输入中的字符数,但是没有发生任何事情。
发布于 2019-07-21 10:32:21
当遇到EOF (=文件结束)条件时,它将打印输入字符的数量。
如果您通过终端提供输入,那么就没有正常的文件端,因此您需要使用一个特殊的键盘快捷方式来发送信号,这通常是Ctrl+Z上的Ctrl+D和Unix系统上的Ctrl+D (Linux,MacOs,.)。(Windows似乎还要求您在Ctrl+Z之前和之后输入一个Enter。Ctrl+Z之前的新行字符可算作另一个字符,这实际上意味着Windows与Unixes不同,它似乎不允许您拥有不以新行结尾的文本文件,至少在没有cygwin的情况下使用混合gcc。)
如果您像在./a.out < some_file中那样通过重定向提供输入文件,那么您不必担心这一点,因为文件系统文件具有自然的目的。
发布于 2019-07-21 10:28:40
您应该使用EOF指示器结束流,这是Windows上的CTRL+Z和基于Linux的操作系统上的CTRL+D。当getchar()读取EOF时,它存在while循环,并将字符数输出到stdout。
https://stackoverflow.com/questions/57132256
复制相似问题