C语言 如何清除EOF指示灯?

pw136qt2  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(185)

我正在阅读一个C语言文本文件。我需要找到第一个出现的特定字符('(')并将指针移动到那个位置。我通过阅读缓冲区,然后使用strchr查找字符来实现这一点。然后我查找字符的位置。问题是,如果我读入缓冲区直到文件末尾,它会设置EOF指示符,即使我返回到字符的位置,EOF指示符还是会被设置,并且会扰乱代码的其他错误处理,那么我如何确保当我返回到文件的内容时,EOF被设置为false呢?

int io_read_until_char(char stopchar, FILE * ifile)
{
    char row[MAXCHAR];
    int offset, read_len;
    char * loc = NULL;

    while (!feof(ifile))
    {
        if(fgets(row, MAXCHAR, ifile) == NULL)
        {
            strerror(errno);
            break;
        }
        read_len = strlen(row);
        loc = strchr(row, stopchar);
        if(loc == NULL)
            continue;
        else
        {
            offset = -read_len + (int)(loc - row);
            fseek(ifile, offset, SEEK_CUR);
            break;
        }
    }
    if(feof(ifile) && loc == NULL)
    {
        return(-1);
    }
    else if(ferror(ifile))
    {
        perror("Error in parsing stuff!\n");
        strerror(errno);
        return(-1);
    }
    else
        return(0);
}
g2ieeal7

g2ieeal71#

要清除流的文件结束指示符,可以调用函数clearerr
但是,这样做应该不是必须的,当调用函数fseek时,文件结束指示符会自动清除,假设函数调用成功。

相关问题