簡體   English   中英

在 c 中使用帶有數組結構的 fscanf 進行文件掃描

[英]file scan using fscanf with array struct in c

所以我想知道如何將 fscanf 與數組結構一起使用。 所以這是我的結構

struct menuinput{
        char nama[50];
        int nomor;
        int berat;
        int jumlah;
        int pilihan;
        float kalori;
        float totalkkal;
    }mknpokok[20],mknsayur[20],mknspsj[20],mknlaukpauk[20],mknbuah[20];

我想在使用 fscanf 的文件掃描中使用它,據我所知文件掃描命令是這樣的

while(!feof(fp))    
{
        fscanf(fp,"\n%d %[^\n] %d %.3f",&mknpokok.nomor[i],mknpokok.nama[i],&mknpokok.berat[i],&mknpokok.kalori[i])
        i++;
}

當我運行時,我收到此錯誤消息

error: '(struct menuinput *)&mknpokok' is a pointer; did you mean to use '->'?

我忘記了如何使用數組結構進行 fscanf,所以我做的是正確的嗎? 如有錯誤,請用正確的代碼更正,謝謝。

您正在以錯誤的方式訪問struct mknpokok的元素。

你應該像&mknpokok[i].nomor而不是&mknpokok.nomor[i] mknpokok.nomor[i] 那樣訪問它們,因為你已經聲明了mknpokok的數組,而不是nomor

  • 您將下標運算符放在了錯誤的元素上。 mknpokok是一個包含20 menuinput的數組,因此在其上使用下標運算符mknpokok[i]
  • 永遠不要使用while(!feof(stream))然后嘗試從 stream 讀取而不檢查讀取是否成功。 請參閱為什么“while(?feof(file) )”總是錯誤的?
  • 您應該始終確保讀取的元素不會超出數組的容量。 始終進行邊界檢查。
  • %.3f不是標准轉換。 您可能應該使用%f

例子:

//   only populate elements 0-19
//              v
    while (i < 20 && fscanf(fp, " %d %[^\n] %d %f", &mknpokok[i].nomor,
                            mknpokok[i].nama, &mknpokok[i].berat,
                            &mknpokok[i].kalori) == 4) {
//                                               ^^^^
//                                    check that fscanf succeeded
        ++i;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM