【问题标题】:how to invoke EOF to standard input如何调用EOF到标准输入
【发布时间】:2014-11-20 11:49:52
【问题描述】:

我的程序使用 while scanf != EOF 从 .in 文件输入标准输入。如 ./"file"

int main() {
int arr[100];
int num;
int count = 0;
while( scanf("%d", &arr[count]) != EOF ) {
    count++;
}
printf("%d\n", arr[0]);
scanf("%d", &num);
printf("%d\n", num);
}

** 输出的只是第一个数字列表的数字,scanf 完全忽略,print num 没有值。

【问题讨论】:

  • en.wikipedia.org/wiki/End-of-file ctrl-d 在 Linux 中,ctrl-z 在 Windows 中
  • 您的 while 没有达到您的预期。
  • 对不起,我只是 printf 的命令 ctrl-d 吗?抱歉,我是 c 新手
  • @Sarc , 按 CTRL+D
  • 但它必须在代码中,因为输入数据首先出现,并且没有提示用户输入

标签: c terminal eof


【解决方案1】:

scanf() 返回读取的字符数。 您需要 feof() 函数,或将 scanf 的返回值与 0 进行比较

【讨论】:

  • 你能解释更多吗?
  • 函数 feof(FILE *) 如果 FILE * 是 EOF,则返回非零。将你的 scanf() 更改为 feof(),在循环体中添加你的 scanf 调用。
  • 可能需要将scanf()替换为fscanf()
  • scanf 和 fscanf 返回读取的字符数,这些函数不能返回 EOF。如果 scanf 读取 EOF,那么 scanf 应该返回零
【解决方案2】:

要在 stdin 中调用/模拟 EOF,如果您在 Windows 中,请按 CTRL+Z。否则在运行程序时按CTRL+D。

【讨论】:

  • 抱歉,我认为我的问题被歪曲了。 while 循环确实结束了文件“file.in”,但第二个 scanf 仍然没有从提示中扫描
  • 尝试使用fclose关闭scanf之前的文件
  • 还是不提示输入
  • 我不知道...尝试在最后一个 scanf%d 之前添加一个空格。您可以参考thisthis 了解更多信息...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 2021-12-22
  • 2016-07-24
相关资源
最近更新 更多