直到C中的EOF语法

时间:2013-12-17 17:40:03

标签: c

我可以使用以下代码扫描到文件末尾:

while(scanf("%d",&a) != EOF) //. . .

while(scanf("%d",&a) == 2) // . . .

while(scanf("%d",&a)+1) // . . .

我的问题非常明确:我可以使用 代替 这些代码?

3 个答案:

答案 0 :(得分:2)

最好的方法不是他们。

最后一个是错的,因为它假设EOF是-1,这不一定是真的。第二个是错误的,因为scanf永远不会返回2格式字符串。第一个有一个镜头,但也不是那么好。

如果循环while(scanf("%d",&a) != EOF),则循环终止于文件末尾(或文件读取错误)。但是,如果出于非文件错误原因scanf失败,则不会检测到它。其中一个错误就是满足%d无法转换的输入,例如字母表中的字母。

scanf返回成功读取的项目数。换句话说,如果您有N%... s(%*...除外),那么scanf应该返回N,否则会出错。此错误可能是输入错误,文件读取错误或文件结束。

因此,检查scanf成功的最安全方法是检查它是否可以读取您要求的项目数。在您的情况下,这是:

while (scanf("%d",&a) == 1)

答案 1 :(得分:1)

你不能不检查EOF。否则它将等待另一个输入。假设您想要在包含输入的文件时获取输入。最简单的方法是第一个,检查你是否在“文件结束”。现在,scanf返回什么。它将返回已成功完成的输入。如果它可以扫描一个整数,如scanf("%d",&a),它将返回1. scanf("%d%d%d%d%d%d",&a,&a,&a,&a,&a,&a)这将返回6.因此,==您正在检查它是否每次都输入正确的输入量。因此,如果金额不正确,您可以像if(scanf("%d",&a)!=1) break一样退出或退出。

您的while(scanf("%d",&a) == 2)错误,应为while(scanf("%d",&a) == 1)

while(scanf("%d",&a)+1)好吗?我不这么认为...... while(scanf("%d",&a)-1)可能没事。

希望这很清楚。

答案 2 :(得分:0)

scanf()将返回0(输入错误),1(良好)或EOF(不再输入)。处理相应的。

int result;
while ((result = scanf("%d",&a)) == 1) {
  Handle_int(a);
}
if (result == 0) {
  Handle_BadData();  // Maybe someone typed non-numeric text
}
else if (result == EOF) {
  Handle_EOForIOError();
}
else {
  ; // This should never happen -else condition not needed
}

不要假设EOF为-1,但它是否定的。