私のrecover.cプログラムは、card.rawファイルからすべての50イメージを回復することができないという事実を除いてうまくいきます。cs50 pset5私の画像回復プログラムは、50枚の画像のうち49枚しか回復しないのはなぜですか?
私は50枚の画像のうち49枚を回復することしかできません。私はかなりの最初のイメージ(雪の背景にある女の子)ですが、私は書き込みとテストの過程でそのイメージを早期に見ていたが、最終的なプログラムはそれ以上イメージを回復しないように見えるので、
ヘルプはありますか?
/**
* recover.c
*
* Computer Science 50
* Problem Set 4
*
* Recovers JPEGs from a forensic image.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef uint8_t BYTE;
typedef uint32_t DWORD;
typedef int32_t LONG;
typedef uint16_t WORD;
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
int main(void)
{
// OPEN CARD FILE
char* infile = "card.raw";
FILE* card = fopen(infile, "r");
if (card == NULL)
{
printf("Could not open %s.\n", "card.raw");
return 2;
}
int f = 0, c = 0, imageno = 0;
// c signals that a jpg is being written
FILE* images;
char title[25];
BYTE buffer[512];
/*repeat until end of card*/
do
{
//read one block into buffer
fread(buffer, 512, 1, card);
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff)
{
if (imageno < 10)
{
sprintf(title, "00%d.jpg", imageno); //change jpg title
}
else
{
sprintf(title, "0%d.jpg", imageno); //change jpg title
}
if (f == 1) //close previous jpg
{
fclose(images);
imageno++;
}
images = fopen(title, "w");
f = 1; //very first jpg has been opened
c = 1; //jpg open
}
//jpg already open?
if (c == 1) fwrite(buffer, 512, 1, images);
}
while (!feof(card));
return 0;
//close any remaining files
}
今使っている2つの 'sprintf()'呼び出しの代わりに、 'sprintf(title、"%03d.jpg "、imageno)'を考えてみましょう。 –
@JohnBollingerはそれをありがとう! –
関数呼び出し--e.gの戻り値を確認してください。 'fread()' - エラーコードや予期しない結果が発生しました。 –