안녕하세요.
심사문제에 대한 답을 제출했는데 계속 오답이라고 나옵니다.
VS2019에서 코딩을 해 본 결과는 심사문제 결과랑 일치하게 정상으로 출력하는데, 막히는 부분이 무엇인지 알고 싶습니다.
참고로, 본분에서 배운 내용 일부 수정한 사항은...
fpTxt = fopen("ascii.txt", "w");
if (fpTxt == NULL)
{
free(image);
return 0;
}
for (int y = height - 1; y >= 0; y--)
{
for (int x = 0; x < width; x++)
{
int index = (x * PIXEL_SIZE) + (y * (width * PIXEL_SIZE)) + (padding * y);
RGBTRIPLE* pixel = (RGBTRIPLE*)&image[index];
unsigned char blue = pixel->rgbtBlue;
unsigned char green = pixel->rgbtGreen;
unsigned char red = pixel->rgbtRed;
unsigned char gray = (red + green + blue) / PIXEL_SIZE;
char c = ascii[gray * sizeof(ascii) / 256];
fprintf(fpTxt, "%c", c);
printf("%c", c);
}
fprintf(fpTxt, "\n");
printf("\n");
}
...입니다.
C 소스 파일도 첨부하오니 검토후에 삭제해주시기 바랍니다.
심사문제는 텍스트 일치로 판단합니다.
파일로 저장하면 심사문제 판단을 할 수 없습니다.
파일 저장이 아니라 화면에 텍스트를 출력하는 걸로 바꿔서 제출해보세요.
fpTxt 부분에서 파일 열기 모드를 r로 바꾸었는데도 오답이 나옵니다.
fpTxt = fopen("ascii.txt", "r");
쓰기 부분이 남아있는 것 없는지 확인 부탁드립니다.
답변을 이해하지 못했군요.
UNIT 81에서 설명한 예제는 ascii.txt 파일로 저장하는 예제입니다.
그러나 심사문제는 파일로 저장해서는 평가할 수 없습니다.
따라서 화면에 출력해야 합니다.
심사문제를 잘 보시면
다음은 해상도 50x50 비트맵 파일을 변환한 결과입니다.
55555555435532112334554453222225335566543334555433 55545555543432223346665554101135223356433322565333 43324666666645665566555555521365332224433322654444 42213644457656666666655555554555432212443333754444 33215644337556666656655655556555432122333335744443 43346443157466666436655655566555432222333358744443 54466442586566665356656655555555533332332499844443 54445337965566664465556555555555553332232699744443 54444279756666653566555555555555554333355556444443 54467898556666643566555555555555555446665433433344이렇게 되어 있습니다.
...
화면에 출력하라는 뜻입니다.
fprintf로 파일에 저장하라는 뜻이 아니라 printf로 화면에 출력하라는 뜻입니다.
fprintf로 출력하고 싶다면 stdout 표준 출력 스트림에 쓰는 방식으로 화면에 출력하라는 뜻입니다.
UNIT 81.7 심사문제를 보시면...
24비트 비트맵 파일 sample.bmp가 주어집니다(최대 파일 크기 200KB이하, 최대 해상도 200x200 이하). 비트맵 파일을 아스키 아트로 출력하는 프로그램을 완성하세요(GitHub 저장소의 Unit 81/sample.bmp와 sample50x50.bmp로 테스트해보세요). 결과는 파일 쓰기 함수로 stdout에 저장하거나 표준 출력 함수를 사용하여 출력하면 됩니다.
마지막 줄에 보면 결과는 fprintf(stdout, ...)
이런 형태로 하거나 표준 출력 함수, 즉 printf 함수를 사용해서 출력하라는 뜻입니다.
stdout을 이용하는 예는 그 앞에 UNIT 72.6, UNIT 71.11 등이 있고, 종종 등장했습니다.
어떤 형태로든 화면에 출력하게 만드세요. 파일로 저장하지 마세요!