2014-03-24 6 views
1

.ppm 파일을 읽고 데이터를 구조체에 유지하는 프로그램을 작성하려고합니다. 그래도이 작업을 수행하려면 파일을 열 수 있어야합니다.이 파일은 지금까지 작동하지 않습니다. 나는 분명히 뭔가 잘못하고있다. 코드를 살펴보고 문제가 무엇인지 확인할 수 있습니까?기본 파일 I/O (ppm 파일)

#include <stdio.h> 
#include <stdlib.h> 

int readFile(char *filename); 

int main(void) 
{ 
    readFile("myfile.ppm"); 
    return 0; 
} 

int readFile(char *filename) 
{ 
    int x = 0; 
    FILE *pFile; 
    pFile = fopen(filename, "rb"); 
    if(!pFile) 
    { 
     fprintf(stderr, "Unable to open file %s\n", filename); 
     exit(1); 
    } 

    fscanf(pFile, "%d", &x); 
    fclose(pFile); 
    printf("%d\n", x); 
    return 0; 
} 

이렇게하면 stdout에 "\ n"이 표시됩니다. int가 아닌 배열로 fscanf해야합니까? 여러분의 의견을 바탕으로

나는 두 개의 문자로 스캔하기 위해 코드를 편집 :

int readFile(char *filename) 
{ 
    char first, second = 0; 
    FILE *pFile; 
    pFile = fopen(filename, "rb"); 
    if(!pFile) 
    { 
     fprintf(stderr, "Unable to open file %s\n", filename); 
     exit(1); 
    } 

    fscanf(pFile, "%c%c", &first, &second); 
    fclose(pFile); 
    printf("First: %c, Second: %c\n", first, second); 
    return 0; 
} 
+0

'* scanf '의 반환 값을 테스트하십시오 : 값이 할당 된 변수의 수이어야합니다. – pmg

답변

2

파일이 두 바이트 시퀀스로 시작 http://en.wikipedia.org/wiki/Netpbm_format에 따르면 P1, P2, P3 (인간이 읽을 수있는 텍스트로 - ASCII) . 따라서 이것을 int으로 읽는 것은 효과가 없습니다. char (P)을 읽은 다음 그 번호에 대해 또 다른 char을 읽고 파일 형식을 확인해야합니다. 그런 다음 형식에 따라 추가 단계를 수행하십시오.

+0

귀하의 의견에 따라 질문을 편집했습니다. 출력 :'First :, Second :' – imre

+0

뭔가로 PPM 파일을보십시오. 처음 두 캐릭터는 무엇입니까? – fritzone

+0

예, 지금 바보 같아요. 오른쪽 바이트 대신 0 바이트 ppm 파일을 업로드했습니다. 고마워요 – imre