我的程序沒有響應,需要像下面的輸入。
這是我的文本文件: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。沒有留下空白終結者的空間。 –