C 从文件中读取双精度浮点数?

C 从文件中读取双精度浮点数?,c,string,file,double,C,String,File,Double,我的问题很简单;我有一个用双精度浮点数填充的文本文件,我需要读入并存储在矩阵中。我知道如何打开该文件,但从那里我不知道如何解析数据并转换它。数字由空格和换行符分隔,每个数字前面都有一个符号(或“+”或“-”)。我不确定应该使用哪个函数(scanf、fg等)读取数据。虽然这是我第一次广泛使用C语言,但我对编程并不陌生。欢迎详细解释,因为我想更熟悉此类任务的处理方式。谢谢 编辑:应该说明文件是由代码生成的,所以不必担心用户会弄乱它。同样从读取文档来看,我似乎可以使用fread将文件的所有内容加载到一

我的问题很简单;我有一个用双精度浮点数填充的文本文件,我需要读入并存储在矩阵中。我知道如何打开该文件,但从那里我不知道如何解析数据并转换它。数字由空格和换行符分隔,每个数字前面都有一个符号(或“+”或“-”)。我不确定应该使用哪个函数(scanf、fg等)读取数据。虽然这是我第一次广泛使用C语言,但我对编程并不陌生。欢迎详细解释,因为我想更熟悉此类任务的处理方式。谢谢

编辑:应该说明文件是由代码生成的,所以不必担心用户会弄乱它。同样从读取文档来看,我似乎可以使用fread将文件的所有内容加载到一个字符串中,然后使用atof解析每个double。这是正确的吗

double d;
scanf("%lf", &d);
scanf将跳过空白字符,让您在一个简单的循环中读取所有值。如果您正在读取文件,那么fscanf应该是您的选择


您应该使用fgetssscanf及其返回值

char line[100];
while( fgets( line,100,filepointer ) )
  if( 1==sscanf(line,"%lf",&adoublevariable) )
    printf("%f",adoublevariable);
  else
    puts("not a double variable");

为什么要检查fgets和sscanf而不直接使用fscanf?@maarons:因为该文件可能已被编辑并。。。用户不可信(一个用户在一个值中用逗号替换了一个点),谁说该文件是由不受信任的用户提供的,或者之前没有检查兼容性?在某些情况下你是对的,但问题只是如何从文件中读取双精度。@pmg在一些欧洲国家用逗号来分隔小数。@Arc676:是的,在葡萄牙人们这样做!这是一个皮塔!解决方案是使用区域设置或预先转换输入,或者给出一个错误,并希望用户开始使用sane格式?我认为有必要使用类似atof或strtod的东西,因为指针只是指向与格式模式匹配的字符串。SCANF将根据您输入到它的第一个参数中的内容来解析输入—在本例中,“%lf”将解析一个双精度值、“%d”一个int、“%s”一个字符串等等。不需要这些其他功能。