将具有不同变量类型的文件读入c中的结构中

时间:2015-11-04 05:18:11

标签: c string file fgets scanf

我试图找出如何读取包含不同变量类型的文件。在这种情况下,.txt文件的格式如下。

MCD
McDonald's
20.45
BK
Burger King
30.47
DQ
Dairy Queen
25.63

它采用两个字符串的模式,后跟一个double。我在该文件中读取的代码如下

int fillArray(struct Stock * array, FILE * fin)
{
   int i = 0;
   char buff[MAX];
   while(fgets(buff, MAX, fin) != NULL)
   {
       strcpy(array[i].symbol, buff);
       fgets(buff, MAX, fin);
       strcpy(array[i].companyName, buff);
       fscanf(fin, "%lf", &array[i].currentPrice);
       i++;
    }
    return i;
}

当我去打印结构时,我得到了这个输出。

MCD
McDonald's
20.45
BK
0.00Burger Kin30.47
30.47
0.00DQ
Dairy Queen
25.63

0.00

一旦读取带空格的字符串,似乎事情就会崩溃。有谁知道这可能导致什么?感谢。

1 个答案:

答案 0 :(得分:0)

使用

读取号码后
fscanf(fin, "%lf", &array[i].currentPrice);

换行符中的换行符仍然存在。对fgets()的下一次调用只读取数组中的换行符。

添加以下内容以跳过此后的行尾。

int c;
while ( ( c = fgetc(stdin)) != EOF && c != '\n');