首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与fgetc()和ungetc()相关的C语法

与fgetc()和ungetc()相关的C语法
EN

Stack Overflow用户
提问于 2015-09-12 04:49:35
回答 2查看 616关注 0票数 0

在我的代码中,我试图完成类似这样的事情(用伪代码编写):

代码语言:javascript
复制
While not at EOF:
    Get line
    Write line to different file
    Skip 30 bytes

目前,我能想到的最好的方法是这样做:

代码语言:javascript
复制
int c;
while((c = fgetc(stream)) != EOF){
     ungetc(c,stream);
     REST OF CODE

有没有更好的方法来检查我是否在EOF,但仍然使用我当前正在阅读的字符?

EN

回答 2

Stack Overflow用户

发布于 2015-09-12 04:53:25

您可能希望在循环外有条件地调用fgetc

代码语言:javascript
复制
int c = fgetc(stream);
while(c != EOF){
    ....
    c = fgetc(stream);
}
票数 1
EN

Stack Overflow用户

发布于 2015-09-12 04:58:07

您可以像这样使用fgetc

代码语言:javascript
复制
while ((c = fgetc(fp)) != EOF) {
    ...
}

,由于您希望读取(正如您的伪代码所述),因此可以使用fgets

代码语言:javascript
复制
char *fgets(char *s, int size, FILE *stream);

您可以将其用作:

代码语言:javascript
复制
char *buffer = malloc(500);

while (fgets(buffer,500, fp)) {
    // treat line here
}

从手册中:

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读取在EOF或换行符之后停止。如果读取了换行符,则将其存储到缓冲区中。在缓冲区中的最后一个字符之后存储一个终止空字节('\0')。

返回

fgets()在成功时返回s,在错误时或在未读取任何字符的情况下出现文件结尾时返回NULL。

这意味着fgets函数的返回可以用作while循环的条件(因此您不需要执行!= EOF)。

EDIT (额外奖励):至于你的skip 30 bytes伪代码,你可能想看看fseek函数手册。

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

https://stackoverflow.com/questions/32531921

复制
相关文章

相似问题

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