2014-07-08 54 views
-1

我需要讀取文本文件並將數據存儲在結構中。我已經完成了使用FILE *fp = fopen("datafile.txt", "r")使用fgets(buffer, sizeof(buffer), fp)來讀取數據來打開文件的部分。我的文件結構如下C:逐行讀取文件並將數據插入到結構中

John is enrolled in MATH 1314 
Steve is enrolled in MATH 1314 


struct course { 
    char name[20]; 
    char department[4]; 
    int number[4]; 
}; 

int main(void) 
{ 
    FILE *fp; 
    char* token; 
    char* line[50]; 

    struct course student; 

    fp = fopen("input-hw04b.txt", "r"); 
    while (fgets(line, sizeof(line), fp) != NULL) 
    { 
    token = strtok(buffer, " "); 
    while (token != NULL) 
    { 
     /* Add structures here */ 
     token = strtok(NULL, " "); 
    } 
    } 
} 

我需要將以下

  • 約翰
  • 1314存儲在student.name
  • MATH在student.department在student.number

到目前爲止,這是我的,我堅持如何將這些數據放入結構中。我從一個文本文件中讀取數據,逐行讀取數據,然後對其進行標記,以便我嘗試將其放入結構中。

+0

瞭解如何解析這些字符串/行,並從中獲取他們的預期信息。在此處搜索存檔或Google而不是要求輸入代碼。 – Rohan

+0

'char * line [50]'應該是'char line [50]'。在你的結構中,你只能存儲一個學生,如果你想存儲幾個學生,你需要一個你的結構或鏈接的數組或類似的東西。 'char部門[4]'只能保存長度爲3的字符串,但在這裏例如。 「數學」是4個字符長。您忘記了信息帳戶的零終止。順便說一句'緩衝區'是什麼? –

+0

我想你的意思是strtok(line,「」)not strtok(buffer,「」) –

回答

1

以下是基於您現有代碼的一些提示。

int count = 0; 
token = strtok(buffer, " "); 
while (token != NULL) 
{ 
     if (count == 0) 
     { 
      strncpy(student.name, token, 20); 
      student.name[19] = '\0'; // ensure null termination 
     } 
     else if (count == 1) 
     { 
      /* validate "is" */ 
      if (strcmp(token, "is") != 0) 
       break; 
     } 
     else if (count == 2) { /*validate "enrolled"*/ } 

     else if (count == 3) { /* validate "in"*/ } 

     else if (count == 4) 
     { 
      // set the department field 
     } 
     else if (count == 5) 
     { 
      // set the number field 
     } 
     count++; 


     token = strtok(NULL, " "); 
} 

當然,這個例子沒有處理一些問題的魯棒性(例如,名稱可能是> = 20個字符或字符串也許只有在這3個字,等...)。但應該讓你開始...

+0

你忘記了原始的strtok(buffer,「」) –

+1

@Claptrap - 已經在OP的原始代碼中。爲簡潔起見,我未包含該部分。我清理了編輯後的答案。 – selbie

+0

我試着按照你的例子,但我沒有得到任何地方 – user3814932

0

您可以分析和存儲串結構,在你給int number[4](存儲4個整數)的結構聲明,這是錯誤的

/*Add Structres Here*/ 
token = strtok(line, " "); 
int j = 1; 
strncpy(student.name,token,strlen(token)); 
while(token!=NULL) 
{ 
    token = strtok(NULL, " "); 
    switch(j) 
    { 
     case 5: strncpy(student.department,token,strlen(token)); 
       break; 

     case 6: student.number = atoi(token); 
       break; 
    } 
    j++; 
} 
j=0; 

/*Your outer loop code continues*/ 

也跟着你情況下,將其更改爲int number。並且在char* line[50]中也不正確,在這種情況下將其更改爲char line[50]

相關問題