奇怪的fread()函数

时间:2019-07-12 07:27:23

标签: c cs50

这是在线CS50课程中来自pset3的恢复问题。我不知道为什么fread()语句中的if()是这样的。只是第一次执行循环时,fread语句中的if()实际上并没有从inptr读取任何内容到数组b中。当循环再次运行时,它实际上开始从inptr中读取。为什么会这样呢?我不得不做另一个循环,仅从第一次迭代中就从inptr中读取。从debug50检查。

while (1)
{

again:
    {}

    // To check if the file is ending
    if (fread(b, 1, 512, inptr) != 512)
    {
        break;
    }

    while (k == 0)
    {
        fread(b, 1, 512, inptr);
        k++;
    }

    // To check if the read block is jpeg
    if (b[0] == 0xff && b[1] == 0xd8 && b[2] == 0xff && (b[3] & 0xf0) == 0xe0)
    {   
        // Close if a jpeg is already opened
        if (i != 0)
        {
            fclose(img);

        }

        // Create new jpegs
        sprintf(filename, "%03i.jpg", i);
        img = fopen(filename, "w");
        i ++;

    }

    // If it is not a jpeg repeat again
    if (i == 0)
    {
        goto again;
    }
    else
    {   
        // If it is a jpeg write it into the opened jpeg file
            fwrite(b, 1, 512, img);
    }
}

0 个答案:

没有答案