文件扫描使用fscanf与c. 数组结构



所以我想知道如何使用数组结构的fscanf。这是struct

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,所以我在做什么是正确的?如有错误,请用正确的代码更正,谢谢。

您正在以错误的方式访问structmknpokok的元素。

您应该像访问&mknpokok[i].nomor而不是&mknpokok.nomor[i]那样访问它们,因为您声明的是mknpokok数组,而不是nomor数组。

  • 您在错误的元素上放置了下标操作符。mknpokok20menuinput的数组,所以在mknpokok[i]上使用下标操作符。
  • 永远不要使用while(!feof(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;
}

最新更新