BEE 發問時間: 電腦與網際網路程式設計 · 1 0 年前

C程式語言:如何把我要讀的檔案 存到STRUCT裡面?

比如說我有ㄧ筆資料

裡面有很多行資料

像: one 123 456;

two 789 112;

我要如何用C程式去分別讀到我的那個檔

然後再把那些東西

分別丟進我打的SRUCT裡面

struct row

{

char name[30];

int number1;

int number2;

};

請詳細說明

謝謝

已更新項目:

那如果我今天裡面又有另外一個SRRUCT

struct line

{

char name[30];

int num1;

int num2;

int num3;

};

文件裡面多出了

one 123 456;

two 789 112;

line1 1 2 3;

line2 4 5 6;

我要如何把東西分開讀進STRUCT裡面

2 個已更新項目:

那如果在不更改讀的檔案內容的前提下

有辦法辦資料分別讀進去嗎?

1 個解答

評分
  • 丸子
    Lv 4
    1 0 年前
    最佳解答

    #include<stdio.h>

    struct row {

    char name[30];

    int number1;

    int number2;

    }line[100]; // 宣告structure變數陣列

    int main()

    {

    FILE *fp;

    int i=0,n;

    char garbage[10]; //用來儲存每行末的";" 及不需要使用的資料

    fp = fopen("your_input_file","r");

    //利用fscanf格式化指令, 將檔案中的資料存到對應的structure變數中

    while(fscanf(fp,"%s %d %d %s",line[i].name, &line[i].number1,

    &line[i].number2,garbage)!=EOF)

    i++;

    fclose(fp);

    for(n=0;n<i;n ) //印出structure內的值

    printf("%s %d %d\n",line[n].name,line[n].number1,line[n].number2);

    }

    有問題再問

    2008-04-03 09:16:04 補充:

    你的意思是"one,two"行存到row structure,"line1,line2"存到line structure嗎?那麼你的檔案內容的每行format必須要有所區隔, 讓程式讀外部檔案時能判別現在這行資料要存在哪個structure, 譬如以名字做判斷, 或是以某個特殊符號作判斷. 如果外部檔案每行的format都一樣, 程式只是盲目的讀取, 盲目的存, 很難區隔現在這行資料要存到哪邊去.

    2008-04-03 09:27:11 補充:

    one 123 456;row //for example

    two 789 112;row

    line1 1 2 3;line

    line2 4 5 6;line

    while(read line data!=EOF) {

    if (strcmp(garbage, ";row")==0)

    save data to row structure

    if (strcmp(garbage, ";line")==0)

    save data to line structure

    }

    以上只是示意, 利用這種方式將檔案內的資料作區隔, 就可以分別存到不同的structure.

    2008-04-07 00:20:42 補充:

    不更改檔案內容? 除非你知道檔案中的哪幾行確定要存到哪個結構, 不然應該辦不到. 即便你知道哪幾行要存到哪個結構, 一旦你的檔案內容或行數變多, 你光要在程式內做判斷就夠你忙的了.

    fopen讀檔不是無敵, 你不給它判斷條件, 任何一個檔案函數都沒可能幫你判斷要存在哪個結構裡. 條件必須你自己加上去才行.

    參考資料: no
還有問題?馬上發問,尋求解答。