繁体   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