每次在 for 循环中时,如何从头开始使用 fscanf?
我想做这样的事情:
for(i=0; i<5; i++)
while(fscanf(in, "%d", &number)
.......
基本上,当我第一次使用 fscanf 时,它会从文件的开头开始扫描。我希望它在每次完成 for 循环时从头开始工作,我该怎么做?
最佳答案
使用rewind()
返回文件开头:
for (i = 0; i < 5; i++) {
rewind(in);
while (fscanf(in, "%d", &number)
.......
但是请注意,此解决方案仅在流可搜索时才有效。如果它绑定(bind)到一个常规文件,无论是通过 fopen
打开还是从 shell 重定向,它应该是可搜索的,但如果它绑定(bind)到终端、管道或其他一些字符设备,rewind()
可能会失败。您不能使用 rewind()
对此进行测试,但这里有一个替代方法:
if (fseek(in, 0L, SEEK_SET)) {
fprintf(stderr, "cannot rewind inut stream\n");
exit(1);
}
更可靠的方法是保存 fscanf()
读取的值以避免查找。
关于c - 每次在 for/while 循环中时,如何从头开始使用 fscanf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424547/