2014-03-30 82 views
0

我需要從C程序中的data.txt文件導入一些數據。我的數據源是這樣的:將數據從txt文件導入C程序

A ABC001 B 
A ABC002 B 
A ABC003 C 
B ABC004 C 
B ABC005 E 
C ABC006 B 
D ABC007 A 
D ABC008 B 
E ABC009 D 

我已經定義了一個新的數據類型來存儲所有的信息:

typedef struct node { 
    char street_name; 
    char number_plate[7]; 
    char destination; 
} Car; 

這是我試圖從上述文件中的數據導入到一個數組:

int main(void) 
{ 
    FILE *file; 
    int i = 0; 
    Car carinfo[9]; 

    file = fopen("data.txt", "r"); 

    while (EOF != fscanf(file, "%c %6s %c", &carinfo[i].street_name, 
              &carinfo[i].number_plate, 
              &carinfo[i].destination)) 
    { 
     printf("Loop #%d\n", i+1); 
     i++; 
    } 



    for (i = 0; i < 9; i++) 
    { 
     printf("Street Name: %c, Number Plate: %s, Destination: %c\n", carinfo[i].street_name, 
                     carinfo[i].number_plate, 
                     carinfo[i].destination); 
    } 

    fclose(file); 
    return 0; 
} 

while循環正在爲10次執行,然後使程序崩潰,因爲顯然它無視EOS應避免另一個迭代。

我在這裏做錯了什麼?任何人都可以請幫我弄清楚?

+0

請在示例中始終包含正確的標題。 – Deduplicator

+0

你會得到什麼輸出? – Deduplicator

+0

它是否會因分段故障而崩潰? – Mauren

回答

1

請更改

while (EOF != fscanf(file, "%c %6s %c", &carinfo[i].street_name, 

while (3 == fscanf(file, " %c %6s %c", &carinfo[i].street_name, 

,然後再試一次。

輸入文件中的每一行都有一個換行符,並且應該忽略它,第一個%c之前的空格將會這樣做。

+0

它的工作原理!謝謝。你能解釋什麼是錯的嗎? – haunted85

+0

@ haunted85您確定要複製並粘貼我的代碼嗎? –

+0

我沒有注意到額外的空間...固定,它運作得很漂亮。謝謝。 – haunted85