提问人:Trung Nguyen 提问时间:11/11/2011 最后编辑:gregwhitakerTrung Nguyen 更新时间:8/24/2015 访问量:41688
如何在 C 中使用 EOF stdin
how use EOF stdin in C
问:
我需要将坐标输入到数组中,直到遇到 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;
}
答:
19赞
Basile Starynkevitch
11/11/2011
#1
我建议使用
while(!feof(stdin) && scanf ( "%d %d ", &a, &b) == 2)
实际上,最好在一些输入操作之后(而不是之前)测试feof,所以:
while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))
顺便说一句,在许多系统上是行缓冲的,至少使用交互式终端(但当 stdin 是管道时可能不是(7)),参见 setvbuf(3)stdin
在 Linux 和 POSIX 上,你可以考虑使用 getline(3) 读取每一行(如果从终端读取,甚至可以使用 readline(3),因为提供了编辑功能),然后使用 sscanf(3) 解析该行(也许也使用 )或 strtol(3) readline
%n
3赞
christop
5/9/2012
#2
我在您的代码中看到的唯一真正的问题是格式字符串中的额外空格。这些空格告诉在输入上使用空格字符,这使得在代码命中非空格字符(例如字母、数字、标点符号或 EOF)之前不会返回到代码。scanf
scanf
scanf
结果是,在键入两个数字之后,您必须在 DOS/Windows 中键入 - (- ) 两次,然后程序才能逃脱循环。EnterCtrlDCtrlZwhile
评论