这是在线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);
}
}