feof在c中给出了额外的循环

时间:2016-09-11 07:44:05

标签: c while-loop fgetc feof

我写这篇文章的原因是因为SO上没有其他帖子解决了我的问题。我已经阅读了关于这个主题的所有帖子,并尝试/测试了这些建议,但是他们没有在我发布的代码的上下文中工作 - 因此帖子首先......

我有以下功能,它在最后给出一个额外的循环,在字符串Im创建的末尾添加另一个字节。我试过在循环变量中添加-1,但似乎没有什么可以摆脱这个额外的循环。 feof是这次练习的正确选择,还是fgetc更好?如果是这样,我如何在我的函数上下文中使用fgetc?

void do_file(FILE *in, FILE *out, OPTIONS *options)
{
    char ch;
    int loop = 0;
    char buf[81];
    buf[0] = '\0';

    int seeker = offsetof(struct myStruct, contents.datas);

    fseek(in, seeker, SEEK_SET);

    fprintf(out, "%i", seeker);

    while (options->max == -1 || loop < options->max)
    {
        if (feof(in))
        {
            break;
        }

        if (loop % 16 == 0)
        {
            if (strlen(buf) > 0)
            {
                buf[0] = '\0';
            }
        }

        fread(&ch, 1, 1, in);
        fprintf(out, "%02X", (int)(ch & 0x00FF));

        if (isalnum(ch))
        {
            char tmp[2];
            tmp[0] = ch;
            tmp[1] = '\0';
            strcat(buf, tmp);
        }

        loop++;
    }
}

0 个答案:

没有答案