知道为什么以下代码不打印输入中的字符数量?我直接从K&R书中看到了这一点.此刻学习C这真的很令人困惑,在我看来我永远不会达到EOF.如果是这种情况那么为什么这会被用作一个例子呢?
#includemain() { double nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%d\n", nc); }
Jeremy Ruten.. 12
该程序看起来正确,您的问题是您必须EOF
在输入后将(文件结束)发送到命令行,因为标准输入被视为文件.我想在linux终端你可以按Ctrl + D发送EOF
...我不知道如何在其他操作系统中执行此操作.要测试此程序,您可能希望更改EOF
为'\n'
在按Enter键时停止该程序.
该程序看起来正确,您的问题是您必须EOF
在输入后将(文件结束)发送到命令行,因为标准输入被视为文件.我想在linux终端你可以按Ctrl + D发送EOF
...我不知道如何在其他操作系统中执行此操作.要测试此程序,您可能希望更改EOF
为'\n'
在按Enter键时停止该程序.
该计划一直读取从数据中stdin
,直到EOF
被接收,这是通过在Windows控制台行的开头一个Unix控制台或Ctrl-Z一行的开头按Ctrl-d完成的.EOF
以这种方式发出信号后,printf
将执行该功能,显示读取的字符数.
你nc
是printf("%lf", nc)
打印双打的双重用途.
试试这个
#includeint main(void) { int nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%d\n", nc); return 0; }
我想澄清到目前为止给出的答案,因为他们似乎使用"发送EOF","收到EOF","EOF字符"等词语.根据评论(感谢)这个答案,"发送EOF"和"收到EOF"是合法的条款,但请不要认为这是一个角色.
EOF根本不是一个角色.如果流处于"文件结束"或发生读取错误,则getchar()(或fgetc/getc)返回的值.它只是一个超出字符值范围的特殊值,getchar()将返回它指示错误或文件结束的条件.
它由C标准定义为负数,而getchar将字符作为转换为int的unsigned char返回.
编辑:在做我曾经写过的段落之前我应该做的一些研究,我已经意识到我的一些假设是完全错误的.感谢评论者指出这一点.
一旦流(例如stdin)处于文件结束条件,就可以使用clearerr()再次清除此条件,并且getchar()可以从stdin读取更多数据.