我想从文件中选择浮点数。我认为解决方案是这样的:
while ( (ch= getc(fp)) != EOF )
{
if( isdigit(ch))
//do some stuff
}
然而我看到,用这种方法我只得到整数(但我想要浮点数)。所以我看了看,发现了这个:
while( (fscanf(fp, "%lf", &n ) == 1)
//do some stuff
我还查看了fscanf()
的定义以及其他内容......
返回值
成功时,该函数返回参数的项数 列表已成功填写。此计数可以匹配预期的数量 由于匹配失败,读数,项目或更少(甚至为零) 错误,或文件结尾的范围。
如果发生读取错误或达到文件结尾 阅读,设置正确的指标(feof或ferror)。而且,如果有的话 在成功读取任何数据之前发生,返回EOF。
如果解释宽字符时发生编码错误,则 函数将errno设置为EILSEQ。
但是,我不理解while( (fscanf(fp, "%lf", &n ) == 1)
。如果fscanf()
读取浮点数将返回1,否则将返回其他内容?
答案 0 :(得分:2)
如果代码中的fscanf
调用会读取并转换一个浮点值,则会返回1
。如果您的格式要求进行两次转换(例如,"%lf %d"
),则会返回2
以获得成功。简而言之,它将返回格式字符串中已成功解析的%
格式的数量。
如果输入不是浮点数,则fscanf
将返回0
,因此循环将结束。或者,如果出现错误或者您已到达文件的末尾,它将返回EOF
,这也将打破循环。