我的程序没有响应,需要像下面的输入。
这是我的文本文件:c编程文本文件结构和fgets时出错
MU-547 China Eastern 10.55 1.20 Every day, via Shianghai + 1 day
MU-541 China Eastern 13.50 1.20 Every day, via Shianghai + 1 day
CI-835 China Airlines 9.40 16.00 Every day, via Taipei
CI-065 China Airlines 16.25 1.10 Every day, via Taipei
SQ-970 Singapore Airlines 20.50 8.40 Every day, via singapore
SQ-972 Singapore Airlines 20.50 11.05 Every day, via singapore
SQ-974 Singapore Airlines 20.50 14.35 Every day, via singapore
SQ-976 Singapore Airlines 20.50 17.55 Every day, via singapore
SQ-978 Singapore Airlines 20.50 20.05 Every day, via singapore
CX-751 Cathay Pacific 9.15 16.20 Every day, via Hong Kong
CX-701 Cathay Pacific 10.45 17.55 Every day, via Hong Kong
#include <stdio.h>
typedef struct
{
char id[7];
char airlineName[31];
float arrive,depart;
char notes[100];
} AIRLINE;
void openFile(const char *data2)
{
AIRLINE plane[12] = {0};
int i = 0;
FILE *file = fopen(data2, "r");
if (file)
{
char line[83];
while(fgets(line, sizeof line, file) && i < 6)
{
fputs(line, stdout);
if(sscanf(line,
"%6s %30c%f%f%99c",
plane[i].id,
plane[i].airlineName,
plane[i].arrive,
plane[i].depart,
plane[i].notes) == 5)
{
printf(" %s ", plane[i].id);
printf(" %c ", plane[i].airlineName);
printf(" %f ", plane[i].arrive);
printf(" %f ", plane[i].depart);
printf(" %c ", plane[i].notes);
i++;
}
}
fclose(file);
}
else
perror(data2);
}
int main(void)
{
openFile("data2.txt");
return 0;
}
我想你的'line [83]'很小。把它改成更大的东西。 – nsilent22
nsilent22是正确的。你最长的线超过90个字符。 它只是没有回应? 您是否熟悉调试器?你有没有一步来看看它有多远? 错误消息 - 不仅仅用于调试 - 会很好。例如如果sscanf不返回预期的分配数量。 – BryanT
你为什么选择'83'?下一次你需要一个文本缓冲区(并且你没有为RAM限制的嵌入式系统开发),只需使用[256]作为所有缓冲区的最小值。如果开发人员这样做,缓冲区溢出的SO帖子就会减少,尤其是那些令人讨厌的obi-wans。没有留下空白终结者的空间。 –