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)