我需要接收数字,直到我按回车键,我试图将scanf的返回值与EOF进行比较,但它一直要求我输入更多数字(无限循环):
int fail=0, late=0, avg=0, i=0, last=0, current, permission, difference;
while(scanf(" %d", ¤t) != EOF)
{
permission = (current < last);
difference = ((last - current) >= 30);
fail += difference*permission;
late += permission;
avg += (last - current)*(permission);
last = last*(permission) + current*(!permission);
}
任何建议。
thanx
答案 0 :(得分:1)
嗯,scanf规范说它会读取并忽略任何空格字符。此外,规范说只有在输入失败的情况下才能返回EOF,然后才能成功读取任何数据。您可以自己阅读here。
我建议使用其他答案中提到的其他阅读功能。尽管如此,如果你必须使用scanf循环生存和死亡,也许你可以在底部添加以下代码:
if (getchar() == '\n') break;
如果您的输入只是数字,它应该可以工作,这只是让它解决的一种方法。
答案 1 :(得分:0)
您遇到的一个问题是scanf的文档说大多数格式转换都会跳过空格。 (这包括回车和换行。)
一种选择是一次读取一个角色,然后制作一些数字。通过这种方式,您可以捕获任何虚假输入。您还可以区分内联空格(空格和制表符)和行终止空格(CR和NL)。
答案 2 :(得分:0)
如果您使用的是Linux,则可以在输入CTRL+D
EOF = CTRL + D (适用于Linux)
EOF = CTRL + Z (适用于Windows)