fscanf返回值

时间:2013-03-10 02:53:12

标签: c scanf

fscanf在读取文件中的数据时返回什么。例如,

int number1, number2, number3, number4, c;

c = fscanf (spFile, "%d", &number1);
//c will be 1 in this case.

c = fscanf (spFile, "%d %d %d %d", &number1, &number1, &number3, &number4);
//in this case, c will return 4.

我只想知道为什么它会根据参数的数量返回这些值。

5 个答案:

答案 0 :(得分:8)

来自manpage for the Xscanf family功能:

  

成功完成后,这些函数将返回数字   成功匹配并分配了输入项;这个数字可以为零   如果早期匹配失败。如果输入结束之前   第一次匹配失败或转换时,应退回EOF。如果一个   发生读取错误,设置流的错误指示符,EOF   应归还,并且应当设置错误   表示错误

因此,您对fscanf的第一次调用会返回1,因为一个输入项(&number1)已成功与格式说明符%d匹配。您对fscanf的第二次调用返回4,因为所有4个参数都匹配。

答案 1 :(得分:3)

我引用 cplusplus.com

  

成功时,该函数返回参数的项数   列表已成功填写。此计数可以匹配预期的数量   由于匹配失败,读数,项目或更少(甚至为零)   错误,或文件结尾的范围。

     

如果发生读取错误或达到文件结尾   阅读,设置正确的指标(feof或ferror)。而且,如果有的话   在成功读取任何数据之前发生,返回EOF。

- 编辑 -

如果您打算确定读取字符串的字节数。

int bytes;
char str[80];
fscanf (stdin, "%s%n",str,&bytes);
printf("Number of bytes read = %d",bytes);

答案 2 :(得分:1)

来自manual页面:

* 这些函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败时甚至为零。 *

因此,如果能够从文件读取一个整数,则第一个返回1,如果能够从文件中读取4个整数,则第二个返回4.

答案 3 :(得分:1)

这恰好是一个非常直截了当的问题,并且在我面前被查尔斯和编辑恰当地回答。但他们没有提到你下次遇到困难时应该在哪里寻找这些东西。

首先是问题 - fscanf属于格式化输入(扫描)函数系列,它们应该读取输入并报告读取的数据的一些信息,如字节或获得适当输入读取并成功分配的项目数(变量地址)

这里fscanf应该使用函数调用中提供的格式字符串检查输入文件中的匹配,并相应地分配(按其位置顺序)变量 - 地址和值,一旦完成它将返回总数计算它所做的成功作业的数量。因此1和next的结果是4(假设输入正确提供)。

第二部分:去哪儿看? - 如果您参考一个,可以在手册页或posix doc中轻松找到这些功能的详细描述。

如果您注意到,前两个答案也包含手册页中的小提取。

希望这会有所帮助。

答案 4 :(得分:1)

返回值不取决于fscanf的参数数量,它取决于fscanf成功扫描的值的数量。