所以我使用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)),但是我们的老师现在正在教这个,这就是我将要暂时使用的东西。先感谢您。我一直在网上搜索,似乎无法到达我需要去的地方。
答案 0 :(得分:1)
代码正在阅读street
两次。也许尝试删除第二个。
不相关的提示:使用sizeof
运算符代替硬编码长度(例如100)。例如,
fgets(array[i].street, sizeof(array[i].street), fin);