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' &amp;&amp; c != EOF) ... @DavidC.Ranakin,哦,是的。我会解决的。 @DavidC.Rankin:您必须像这样检查两者:char readChar; while ((readChar = getchar()) != EOF &amp;&amp; readChar != '\n') ... 仅当您的实现将EOF 定义为char 类型时,否则EOF(通常为-1)将永远不会出现在little-endian 框中。 (面面相觑)是的,这只是对 Windows 人群的轻松挖掘。 (我不反对任何操作系统,但不喜欢租用软件......)

以上是关于EOF 在 Mac Xcode (C) 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥图像文字在 Xcode 11.2.1 中不起作用?

Flutter 图像选择器在带有 Mac M1 芯片模拟器的 ios 14 中不起作用

相对路径在 Xcode C++ 中不起作用

注册远程通知在 Xcode 6 中不起作用

“图像文字”命令在 Xcode 中不起作用

XCode 5 - OpenURL 在 ViewController 中不起作用