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.
我只想知道为什么它会根据参数的数量返回这些值。
答案 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
成功扫描的值的数量。