EOF 在 Mac Xcode (C) 中不起作用?
Posted
技术标签:
【中文标题】EOF 在 Mac Xcode (C) 中不起作用?【英文标题】:EOF does not work in Mac Xcode (C)? 【发布时间】:2017-06-16 06:14:38 【问题描述】:我目前正在运行此字符计数 .c,但除非我按控制 D,否则无法达到 EOF,这非常烦人。
#include <stdio.h>
main ()
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
【问题讨论】:
你不是说EOL吗? (行尾)而不是文件尾 除非 CTRL+D,否则你会期望 EOF 吗?main ()
--> int main (void)
@SouravGhosh int main(int argc, char **argv)
如果你想挑剔的话。
@duskwuff:当程序忽略命令行参数时,不需要为main()
使用 argc/argv 形式。 int main(void)
和 int main(int argc, char **argv)
都明确确定。
【参考方案1】:
您看到的是预期的行为。
仅在输入流结束时遇到EOF。你在做什么(我想)是按回车键。这并不表示 EOF,因为您可以在输入后输入更多内容。 Ctr+D 表示文件结束。
您可以做的是寻找行尾。 而且您还需要寻找 EOF,因为用户可以通过按 Ctr+D 来终止 (由@DavidC.Rankin 建议)
这可以通过将 getchar() 与 '\n'
和 EOF 作为匹配来完成
int c
while ((c = getchar()) != '\n' && c != EOF)
++nc;
希望这会有所帮助。
【讨论】:
如果用户按下Ctrl+d
(或windoze 上的ctrl+z
)会发生什么? (你需要同时检查'\n'
&& EOF
)(例如int c; while ((c = getchar()) != '\n' && c != EOF) ...
)
@DavidC.Ranakin,哦,是的。我会解决的。
@DavidC.Rankin:您必须像这样检查两者:char readChar; while ((readChar = getchar()) != EOF && readChar != '\n') ...
仅当您的实现将EOF
定义为char
类型时,否则EOF
(通常为-1
)将永远不会出现在little-endian 框中。
(面面相觑)是的,这只是对 Windows 人群的轻松挖掘。 (我不反对任何操作系统,但不喜欢租用软件......)以上是关于EOF 在 Mac Xcode (C) 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章