在我的代码中,我试图完成类似这样的事情(用伪代码编写):
While not at EOF:
Get line
Write line to different file
Skip 30 bytes目前,我能想到的最好的方法是这样做:
int c;
while((c = fgetc(stream)) != EOF){
ungetc(c,stream);
REST OF CODE有没有更好的方法来检查我是否在EOF,但仍然使用我当前正在阅读的字符?
发布于 2015-09-12 04:53:25
您可能希望在循环外有条件地调用fgetc:
int c = fgetc(stream);
while(c != EOF){
....
c = fgetc(stream);
}发布于 2015-09-12 04:58:07
您可以像这样使用fgetc:
while ((c = fgetc(fp)) != EOF) {
...
}或,由于您希望读取行(正如您的伪代码所述),因此可以使用fgets
char *fgets(char *s, int size, FILE *stream);您可以将其用作:
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函数手册。
https://stackoverflow.com/questions/32531921
复制相似问题