从文件中选择浮点数

时间:2014-01-15 10:03:15

标签: c file-io scanf

我想从文件中选择浮点数。我认为解决方案是这样的:

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,否则将返回其他内容?

1 个答案:

答案 0 :(得分:2)

如果代码中的fscanf调用会读取并转换一个浮点值,则会返回1。如果您的格式要求进行两次转换(例如,"%lf %d"),则会返回2以获得成功。简而言之,它将返回格式字符串中已成功解析的%格式的数量。

如果输入不是浮点数,则fscanf将返回0,因此循环将结束。或者,如果出现错误或者您已到达文件的末尾,它将返回EOF,这也将打破循环。