如何在C中使用EOF stdin

Tru*_*yen 5 c stdin scanf feof

我需要将坐标输入到数组中,直到遇到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;
}
Run Code Online (Sandbox Code Playgroud)

Bas*_*tch 17

我建议使用

while(!feof(stdin) && scanf ( "%d %d ", &a, &b) == 2)
Run Code Online (Sandbox Code Playgroud)

实际上最好(之前没有!)某些输入操作之后测试feof ,因此:

while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))
Run Code Online (Sandbox Code Playgroud)

BTW,在许多系统上stdin缓冲的,至少是交互式终端(但是当stdin管道(7)时可能不是这样),参见setvbuf(3)

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