如何在C中使用EOF stdin

时间:2011-11-11 13:32:52

标签: 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;
}

2 个答案:

答案 0 :(得分:16)

我建议使用

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

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

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

BTW,在许多系统上stdin缓冲,至少在交互式终端上(但可能不是在 stdin pipe(7)时) ,请参阅setvbuf(3)

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

答案 1 :(得分:3)

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

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