在C中读取struct数组时只打印txt文件的最后一行

时间:2017-06-07 22:46:20

标签: c arrays file loops struct

我正在从一个txt文件读取一个结构数组。示例txt:

-4.5 -1 0 0
4.0 1 0 0
8 0 1 2
12.1 0 -6 1
-3.2 2.5 -3.0 4

每行的4个值对应于结构中的4个值。该文件最多可包含100行(MAX定义为100行)。使用以下代码,我试图将每一行存储到struct数组的相应索引中,然后打印:

FILE *fileName = NULL;
typedef struct chargeData_struct {
    double Q, x, y, z;
} ChargeData;
ChargeData values[MAX], *p = values;

fileName = fopen("charge2.txt", "r");
if (fileName == NULL)
{
    printf("ERROR: Could not open file.");
}

int k = 0;
while (fscanf(fileName, "%lf %lf %lf %lf", &p[k].Q, &p[k].x, &p[k].y, &p[k].z) != EOF);
{
    printf("%f %f %f %f\n", p[k].Q, p[k].x, p[k].y, p[k].z);
    k++;
}
fclose(fileName);

但是,只打印txt文件的最后一行。是否每次都覆盖struct数组的相同索引?

2 个答案:

答案 0 :(得分:0)

你正在使用额外的分号,这就麻烦了,在这里:

while (fscanf(...) != EOF);
{
   ...

删除它,你应该没事。

您的代码会发生什么while(..);等同于此:

while(...)
{
    ; // do nothing
}

因此不会进入你的循环体(你认为是身体)(因为实际的身体什么都不做)。但是scanf()继续解析文件,然后代码的这一部分执行:

{
    printf("%f %f %f %f\n", p[k].Q, p[k].x, p[k].y, p[k].z);
    k++;
}

独立地,花括号被视为他们想要陈述范围。

答案 1 :(得分:0)

override