8

我需要将坐标输入到数组中,直到遇到 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;
}
4

2 回答 2

18

我建议使用

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

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

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

顺便说一句,在许多系统上stdin缓冲的,至少对于交互式终端(但可能不是当stdinpipe(7)时),请参阅setvbuf(3)

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

于 2011-11-11T13:34:39.687 回答
3

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

结果是,在输入两个数字 then 之后Enter,您必须输入Ctrl- D(在 DOS/Windows 中为 -)Ctrl两次然后程序才能退出循环。Zwhile

于 2012-05-08T19:15:39.507 回答