如何在C中使用EOF stdin
我需要将坐标输入到数组中,直到遇到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; }
我建议使用
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
提供编辑function),然后使用例如sscanf(3)解析该行(也许还使用%n
)或strtol(3)
我在代码中看到的唯一真正的问题是scanf
格式字符串中的额外空格。 这些空格告诉scanf
消耗输入上的空格字符,这使得scanf
在返回非空白字符(例如字母,数字,标点符号或EOF)之前不会返回到您的代码。
结果是在输入两个数字然后输入后 ,您必须在程序转义while
循环之前两次键入Ctrl – D (在DOS / Windows中为Ctrl – Z )。