fscanf返回值

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. 

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

Xscanf系列函数的联机帮助页

成功完成后, 这些function将返回成功匹配和分配的输入项目的数量 ; 如果早期匹配失败,此数字可以为零。 如果输入在第一次匹配失败或转换之前结束,则返回EOF。 如果发生读错误,则设置流的错误指示符,返回EOF,并设置errno以指示错误

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

我引用cplusplus.com的话 。

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

如果在读取时发生读取错误或达到文件结尾,则设置正确的指示符(feof或ferror)。 并且,如果在成功读取任何数据之前发生任何一次,则返回EOF。

– 编辑 –

如果您的意图是确定读取字符串的字节数。

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

从手册页:

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

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

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

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

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

第二部分:去哪儿看? – 如果您参考一个,可以在手册页或posix doc中轻松找到有关此类function的详细说明。

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

希望这可以帮助。

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