创建struct c数组

时间:2013-11-20 02:24:45

标签: c file-io struct

所以我使用struct来创建一个如下所示的地址:

typedef struct Address{
    char street[100];
    char city[100];
    char state[3];
    int zip;
}address;

我有一个如下所示的txt文件:

123 Anywhere
Spokane
WA
99223
500 Sprague Ave
Spokane
WA
99201
319F CEB
Cheney
WA
99004

当我读到文件时,我遇到了一个很大的问题。它将正确读取几行,但大多数其他内容都是错误的。任何数字都是完全错误的。

int fillArray(address *array, FILE * fin){
int i=0, total=0;
do{
    fgets(array[i].street, 100, fin);
    fgets(array[i].city, 100, fin);
    fgets(array[i].state, 3, fin);      
    fgets(array[i].street, 100, fin);
    fscanf(fin, "%d", &array[i].zip);
    total++;
    i++;
}while(!feof(fin));

return total;
}

显然我做错了但我不确定我做错了什么。我认为如果我使用fgets,它将获得该行,然后将其存储到我需要它的区域。我之前用过fscanf的所有东西,我也没有到达任何地方。它只会将123和随后的任何地方带到下一个地方,因为直到它看到的第一个空白。有没有办法使用fscanf获取整行,或者不是fgets的作用?有更简单的方法吗?是的我知道我不应该使用while(!feof(fin)),但是我们的老师现在正在教这个,这就是我将要暂时使用的东西。先感谢您。我一直在网上搜索,似乎无法到达我需要去的地方。

1 个答案:

答案 0 :(得分:1)

代码正在阅读street两次。也许尝试删除第二个。

不相关的提示:使用sizeof运算符代替硬编码长度(例如100)。例如,

fgets(array[i].street, sizeof(array[i].street), fin);