所以我想知道如何使用数组结构的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,所以我在做什么是正确的?如有错误,请用正确的代码更正,谢谢。
您正在以错误的方式访问struct
mknpokok
的元素。
您应该像访问&mknpokok[i].nomor
而不是&mknpokok.nomor[i]
那样访问它们,因为您声明的是mknpokok
数组,而不是nomor
数组。
- 您在错误的元素上放置了下标操作符。
mknpokok
是20
menuinput
的数组,所以在mknpokok[i]
上使用下标操作符。 永远不要使用 - 你应该始终确保你不会读取超过你可以容纳在你的数组的元素。总是做边界检查。
%.3f
不是标准转换。你应该使用%f
。
while(!feof(stream))
,然后在没有检查读取是否成功的情况下尝试从流中读取。参见为什么"while(!feof(file))"总是错的?例子:
// 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;
}