【发布时间】:2021-01-20 11:23:13
【问题描述】:
我正在尝试读取 txt 文件并将信息放入 C 类项目的结构中。我的代码似乎没有读取文件并将信息放入结构中。我阅读了许多博客文章,但找不到或纠正我的错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct flightData {
char airline[9];
int flightCode;
char departureAirport[3];
char destinationAirport[3];
int passengerCapacity;
int depTimeHour;
int depTimeMin;
int arvTimeHour;
int arvTimeMin;
};
int main(){
FILE *flightFile;
flightFile = fopen("flights.txt","r");
int flightCount=0;
struct flightData input[10];
if (flightFile == NULL)
{
fprintf(stderr, "\nError opening file\n");
exit (1);
}
while (fscanf(flightFile,"%s %d %s %s %d %d:%d %d:%d", input[flightCount].airline,&input[flightCount].flightCode,input[flightCount].departureAirport,input[flightCount].destinationAirport
,&input[flightCount].passengerCapacity,&input[flightCount].depTimeHour,&input[flightCount].depTimeMin,&input[flightCount].arvTimeHour,&input[flightCount].arvTimeMin)!= EOF){
flightCount++;
printf ("%s\n",input[flightCount].airline);
}
fclose(flightFile);
return 0;
}
这里是 .txt 文件
THY 12345 IST DUD 10 20:05 16:10
LUFTHANSA 23356 IST MUC 10 11:55 12:40
PEGASUS 34567 SAW MUC 10 12:20 17:00
PEGASUS 45678 SAW XSP 10 01:55 17:20
EMIRATES 67890 ADB HKG 10 19:45 15:50
THY 78901 SAW IST 10 07:20 08:25
从这段代码中我得到了这个结果:
X����
P+�
【问题讨论】:
-
[3]太短而无法存储,例如"LHR"。它需要[4]和 以在读取时使用%3s限制输入。另请比较fscanf与== 9而不是!= EOF。 -
\nError opening file\n是无用错误消息的典型示例。告诉用户导致问题的路径,并报告问题所在。perror("flights.txt") -
...而
char airline[9];太短,无法存储"LUFTHANSA"。它至少需要为[10],并且%s没有长度限制是等待发生的损坏。