【问题标题】:Why do I have to type CTRL + Z 3 times to send EOF?为什么我必须按 CTRL + Z 3 次才能发送 EOF?
【发布时间】:2016-01-08 16:24:45
【问题描述】:
int x, sum=0;
while(scanf_s("%d", &x) != EOF) 
{
    sum += x;  
}
printf("sum is %d", sum);
return 0;

不管怎么输入,我都要按CTRL + Z 3次才能打印sum。我正在使用 VS 2015。

【问题讨论】:

  • 不应该像这样使用scanf_s(在你的情况下):scanf_s("%d", &x, 1)?
  • @FiddlingBits 不。仅在使用 %c%s%[ 时才需要额外的参数。
  • 您能否发布minimal reproducible example 以及示例输入和输出?
  • 感谢 cmets,我发现在 VS2008 上使用该代码,它可以工作。所以,VS2015有问题。也使用#pragma warning (disable : 4996)scanf instad of scanf_s,它不起作用

标签: c visual-studio-2015 scanf eof


【解决方案1】:

EOF 是一个特殊的常量,应该只在从文件中读取以检查文件结尾时使用

End Of the File 是它所代表的东西,并且是一种方便的方式来表示它而无需记住它的实际价值是。

按 Ctrl + Z 会导致不同的行为,具体取决于系统。在 Linux 系统上,它会挂起一个进程。在 Windows 上,它被内核解释为 Undo 命令。它在 Mac OS 上没有任何行为,并且被替换为 CMD + Z,其功能类似于 Windows Ctrl + Z。

scanf_s 返回一个 int,它是从输入中读取的字符数。

【讨论】:

  • 好信息,但这是评论,而不是答案。
  • @FiddlingBits 然后发布一个“实际”答案,而不是抱怨它。他想知道为什么他必须按 Ctrl + Z 3 次。我的回答是因为行为未定义。
  • @FiddlingBits 如果它是非建设性的,我不会接受批评,就像你的评论一样。查看我的个人资料,了解人们纠正我的其他地方。如果他们提供正确的答案而不是仅仅说“你错了”,我会很高兴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多