c - 每次在 for/while 循环中时,如何从头开始使用 fscanf?

标签 c

每次在 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/

相关文章:

c - 在 C 中通过网络序列化和同步数据结构

c - Mac OS complie dynamic C lib error (lib function will call in lua)

c - 在信号量中排队 - 甚至可能吗?

c++ - 在禁用所有编译器优化的情况下使用 volatile

在 C 中初始化结构数组的编译器错误(数组必须用大括号括起来的初始化器初始化)

c - C 程序的奇怪输出随重定向而改变

c - 如何区分两个未初始化的静态变量

c - 初始化指向结构的指针时出现无效的初始化程序错误

如果新尺寸更小,realloc 可以移动指针吗?

c - 二维数组和指针有什么关系?