如何在C中使用EOF标准



我需要将坐标输入到数组中,直到遇到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("Wrongn");
    }
    else
    {
       for(i=0;i<n;i++)
       printf("%d %dn", x[i], y[i]);
    }
  return 0;
}

我建议使用

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

,实际上最好在之后(而不是之前)测试feof ,所以:

while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))
顺便说一句,在许多系统上,stdin缓冲的,至少在交互式终端上是这样(但当stdin是管道(7)时可能不是这样),参见setvbuf(3)

Linux &POSIX你可以考虑用getline(3)读取每一行(如果从终端读取,甚至用readline(3),因为readline提供编辑功能),然后用sscanf(3)(可能也使用%n)或strtol(3)

解析该行

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

结果是,在键入两个数字之后,然后输入,您必须键入Ctrl-D(在DOS/Windows中为Ctrl-Z) 两次,然后程序才会逃避while循环。

相关内容

  • 没有找到相关文章

最新更新