【问题标题】:how use EOF stdin in C如何在 C 中使用 EOF 标准输入
【发布时间】:2011-11-11 13:32:52
【问题描述】:

我需要将坐标输入到数组中,直到遇到 EOF,但我的代码有问题。我用了ctrl+Z,ctrl+D

int main()
{
    int x[1000],y[1000];
    int n=0,nr=0,a,b,i;
    printf("Enter the coordinates:\n");
    while(scanf ( "%d %d ", &a, &b) == 2)
    {
     x[n]=a;
     y[n]=b;
     n++;
    }
    if (!feof(stdin))
    {
       printf("Wrong\n");
    }
    else
    {
       for(i=0;i<n;i++)
       printf("%d %d\n", x[i], y[i]);
    }

  return 0;
}

【问题讨论】:

  • 总是打印错吗?

标签: c stdin scanf feof


【解决方案1】:

我建议使用

while(!feof(stdin) && scanf ( "%d %d ", &a, &b) == 2)

实际上最好测试feof之后(不是之前!)一些输入操作,所以:

while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))

顺便说一句,在许多系统上,stdinline 缓冲的,至少对于交互式终端来说是这样(但当 stdinpipe(7) 时可能不会),请参阅 @987654323 @

在 Linux 和 POSIX 上,您可以考虑使用 getline(3) 读取每一行(如果从终端读取,甚至使用 readline(3),因为 readline 提供编辑功能),然后使用例如解析该行sscanf(3)(也许也使用%n)或strtol(3)

【讨论】:

    【解决方案2】:

    我在您的代码中看到的唯一真正问题是scanf 格式字符串中的多余空格。这些空格告诉scanf 在输入中使用空白字符,这使得scanf 在遇到非空白字符(例如字母、数字、标点符号或EOF)之前不会返回您的代码。

    结果是输入两个数字后,再Enter,你必须输入Ctrl-DCtrl kbd>-Z 在 DOS/Windows 中)两次 在您的程序转义 while 循环之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多