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