【问题标题】:How to use scanf after using while loop scanf !=EOF使用 while loop scanf !=EOF 后如何使用 scanf
【发布时间】:2014-09-25 09:26:41
【问题描述】:

我必须在我的 program.gcc 中输入一个 .in 文件 ./"file" 因为有多个输入,我必须使用 While 循环 EOF,但是 因为那个我不能再scanf了。 这是我的程序的模拟版本。谢谢

#include <stdio.h>

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 返回读取和分配的数据字段数。在这种情况下 - int 值的数量。因此,成功时为 1,失败时为 0。或者,如果发生读取错误或文件结尾,则可能是 EOF。见cplusplus.com/reference/cstdio/scanf
  • @CiaPan OP 当然想从重定向的stdin 读取所有输入,然后想继续从控制台读取(非重定向输入)。与其说程序示例 产生什么,不如说它如何使用来自重定向 stdin 然后“未重定向”@ 的输入987654326@.
  • 输入文件可以工作并打印,但之后不允许用户在终端中输入

标签: c


【解决方案1】:

试试这个

freopen("con:", "r", stdin);//this for windows. "/dev/tty" for *nix ?
scanf("%d", &num);

【讨论】:

  • 为什么要强制从控制台读取?该示例显示 OP 想要从文件中读取...
  • @CiaPan 我不这么认为。它已通过读取直到文件输入的 EOF 完成。
  • 查看第一行末尾:./"file" &lt; file.in
  • @CiaPan 我知道,那又怎样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 2022-07-18
相关资源
最近更新 更多