首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用fgetc之后使用fgetc?

如何在使用fgetc之后使用fgetc?
EN

Stack Overflow用户
提问于 2021-11-18 01:58:19
回答 1查看 94关注 0票数 0

我试图编写一个从文件中读取数据的特定程序,但我意识到当我用fgetc读取文件时,如果稍后使用fget,它就没有任何输出。

例如,这段代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE * arq = fopen("arquivo.txt", "r");
    char enter = fgetc(arq);
    int line_count = 1;
    
    while(enter != EOF) {
        if (enter == '\n') line_count++;
        enter = fgetc(arq);
    }

    printf("%d", line_count);
    char str[128];

    while(fgets(str, 128, arq)) printf("%s", str);
}

第二个while不打印任何内容,但是如果我删除第一个while,代码将打印文件内容。为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-18 02:13:23

rewind(arq);是你想要的

当您从文件中读取时,内部文件指针将随着您的读取而前进,因此每个后续读取都将返回该文件中的下一个数据。当您到达末尾时,所有后续读取都将返回EOF,因为没有更多可读取的内容。

可以使用fseekftell函数操作内部文件指针。fseek允许您将内部文件指针设置为文件中相对于开始、结束或当前位置的任意点。ftell会告诉你当前的位置。这使您可以轻松地记住文件中的任何位置,然后再返回。

概要

#包括 int rewind(文件*流,长偏移距,整数);长ftell(文件*流);

描述

函数设置流所指向的流的文件位置指示符。新的位置(以字节为单位)是通过向其中指定的位置添加偏移字节来获得的。如果将其设置为SEEK_SETSEEK_CURSEEK_END,则偏移量相对于文件的开始、当前位置指示符或文件末尾。成功地调用file()函数可以清除流的文件末尾指示符,并取消ungetc(3)函数对同一流的任何影响。

函数获取由流指向的流的文件位置指示符的当前值。

函数将按流指向的流的文件位置指示符设置为文件的开头。它相当于:

(空)搜寻(流,0L,SEEK_SET)

除非流的错误指示符也被清除(请参见清除器(3))。

这里需要注意的一点是,ftell使用的偏移量和byte返回的偏移量是字节偏移量,而不是字符偏移量。因此,当访问非二进制文件(任何未用"b"修饰符打开的文件)时,偏移量可能与字符不完全对应。将ftell返回的偏移量传递到文件中的同一个位置应该是可以的,但是尝试计算偏移量可能会很棘手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70013676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档