我需要将坐标输入到数组中,直到遇到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
循环。