我的循环不起作用(使用 feof)

My loop isn't working(using feof)

提问人:Borislav Nikolaev 提问时间:11/26/2015 最后编辑:LynnBorislav Nikolaev 更新时间:11/26/2015 访问量:608

问:

FILE *test;
student st;
int i = 0;
test = fopen("example.bin", "rb");
while (feof(test))
{
    fread(&st, sizeof(st),1,test);
    Class[i] = st;

    i++;
}
fclose(test);

所以我的问题是如何阅读它,将数据放入我的结构中并停止循环?

C 循环 feof

评论

0赞 John Bollinger 11/26/2015
具体来说,你观察到的不当行为是什么?
2赞 John Bollinger 11/26/2015
但请注意,您的使用是不正确的;看到 stackoverflow.com/questions/5431941/...feof()
0赞 M.M 11/26/2015
您能否澄清一下您是尝试读取单个学生,还是尝试从文件中读取所有学生?
0赞 Weather Vane 11/26/2015
...无论如何,这将是,但正如所评论的那样,无论哪种方式都是错误的。while (!feof(test))
0赞 user3629249 11/26/2015
通常,切勿使用 for 循环控制。在本例中,请使用调用 to 的返回值来控制循环。的手册页包含有关返回值的详细信息feof()fread()fread()

答:

2赞 M.M 11/26/2015 #1

看看为什么 while(feof) 总是错的。

相反,您应该循环,直到您无法阅读学生:

while (1 == fread(&st, sizeof st, 1, test))
{
    Class[i++] = st;
}

此外,最好确保你不会溢出 的缓冲区,所以也要检查一下,例如:Classi

for (i = 0; i < MAX_CLASS && 1 == fread(&st, sizeof st, 1, test); ++i)
{
    Class[i] = st;
}

评论

0赞 user3629249 11/26/2015
from 的赋值在 c 中不起作用(可能在 c++ 中),但这不是 c++Class[i]st