1

我的文本文件格式是这样的:

3.2、5.6

444.2 , 555

112.34 , 32.3


我想读取文件名file.txt中存在的上述信息并将其存储在两个数组a,b中,其中a将在逗号之前具有浮点值,b将在逗号之后具有浮点值

4

2 回答 2

2

fgets()在循环中使用以读取每一行。然后,一旦你有了这条线,使用sscanf()扫描出两个浮点数,如下所示:

while(fgets(line, sizeof line, myfile) != NULL)
{
  if(sscanf(line, "%f,%f", &a[i], &b[i]) == 2)
  {
    ++i;
  }
  else
    printf("Parse error in %s", line);
 }

请注意,来自的返回值sscanf()表示成功的转换次数。如果不是两个,我们不想在数组中前进。当然,请记住确保在循环之前i初始化。0

于 2013-05-23T07:48:22.183 回答
0

例如

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define DATA_SIZE 10

int main (void){
    char filename[256] = "file.txt";
    char input_line[128];
    FILE *fp;
    float a[DATA_SIZE],  b[DATA_SIZE];
    int i,j;

    if(NULL==(fp=fopen(filename, "r"))){
        perror("input file open");
        return -1;
    }
    i=0;
    while(NULL!=fgets(input_line, sizeof(input_line), fp)){
        if(*input_line == '\n') continue;
        a[i]=atof(strtok(input_line, " ,\n"));//ok even this ","
        b[i]=atof(strtok(NULL      , " ,\n"));
        ++i;
    }
    //check print
    for(j=0;j<i;++j){
        printf("a[%d]=%g, b[%d]=%g\n", j, a[j], j, b[j]);
    }
    return 0;
}
于 2013-05-23T08:26:32.263 回答