2014-09-01 93 views
-2

我正在做一項任務,有點難倒。作業的目標是從txt文檔讀取零件名稱並將其放入零件結構中。我用fgets()將信息放入char數組中,但現在我不確定如何將其轉換爲結構。如何將char數組轉換爲結構數組?

#include <stdio.h> 
#include <string.h> 

typedef struct part 
{ 
    char pname[25]; 
    char pnumber[8]; 
    double weight; 
    char supplier1[5]; 
    char supplier2[5]; 
    int in_stock; 
} Part; 

void main() 
{ 
    Part partlist[100]; 
    char buffer[260]; 
    FILE *fp; 
    int i = 0; 
    fp = fopen("part_data.txt", "r"); 
    if (fp == NULL) 
    { 
     printf("Could not open file.\n"); 
    } 
    while (!feof(fp)) { 
     if (fgets(buffer,260,fp)) { 
      printf("%s\n", buffer); 
     } 
    } 
    fclose (fp); 
} 

我試圖把在結構中的數據的一個例子是這樣的:

antenna   4553-02 1.9800 A123 B021 12 
ratchet   2347-01 0.8725 A007 B021 49 
seatbelt   1987-01 0.4310 A333 B001 61 
pin    5637-03 0.0351 A007 B010 146 
wing assembly 2372-02 6150.0 A333 B021 4 
+1

確定結構需要哪些字段。其次定義結構。 – 2014-09-01 18:25:46

回答

-1

結構是各類coll'n。你只有一個類型是char數組。你的數據像字符串一樣是單一數據類型。可能你的問題不是很清楚。如果要在許多變量中添加很多部分的字符串,請參閱相同的結構。那麼這是可能的。

1

如果零件名稱不包含任何數字,則可能有效。只要fscanf成功讀取六個項目,它就會掃描該文件。 %24[ a-zA-Z]將跳過前導空白並最多讀取24個大寫或小寫字母和空格。 %7s將讀取最多7個字符到下一個空格。 %lf將讀取一個雙精度,%4s將讀取最多四個字符到下一個空白。 %d將讀取整數。當fscanf無法讀取六個項目(可能已達到EOF)時,while循環將結束並且文件將被關閉。

int i = 0; 
fp = fopen("part_data.txt", "r"); 
if (fp == NULL) 
{ 
    printf("Could not open file.\n"); 
} 
else { 
    while ((fscanf (fp, " %24[ a-zA-Z] %7s %lf %4s %4s %d" 
    , partlist[i].pname, partlist[i].pnumber, &partlist[i].weight   
    , partlist[i].supplier1, partlist[i].supplier2, &partlist[i].in_stock)) == 6) { 
     i++; 
     if (i >= 99) { 
      break; // exit so as to not exceed array limits 
     } 
    } 
    fclose (fp); 
}