2013-09-07 5 views
1

.pgm 이미지 파일 (mars.pgm)의 헤더에서 크기 값을 읽고 sscanf를 사용하여 결과 값을 정수 변수 u 및 v에 할당하려고합니다..pgm 이미지 파일의 헤더를 읽습니다.

프로그램을 실행하면 P5 832 700 127이 첫 번째 줄에 인쇄됩니다 (832와 700은 선택하려는 크기 값입니다).

u 및 v 변수를 인쇄하기위한 두 번째 줄에는 832 및 700 값 대신 두 개의 매우 큰 숫자가 인쇄됩니다.

이것이 원하는대로 작동하지 않는 이유를 알 수 없습니다. 게시물의 하단에있는 작은 테스트 프로그램을 사용할 때 sscanf는 내가 예상했던 것처럼 문자열에서 값을 추출합니다. 예를 들어, 0으로 변수를 초기화하고, 그들이 한 후 읽기 동작을 들고 어떤 값을 확인 :

#include<stdio.h> 
#include <string.h> 

int main() 
{ 
FILE *fin; 
fin= fopen ("mars.pgm","r+"); 
if (fin == NULL) 
{ 
printf ("ERROR"); 
fclose(fin); 
} 


int u,v,i,d,c; 
char test[20]; 

for (i=0; i<=20; i++) 
{ 
test[i]=getc(fin); 
} 

sscanf(test,"%d,%d,%d,%d",&c,&u,&v,&d); 

printf("%s\n",test); 

printf("%d %d",u, v); 


fclose(fin); 
} 

작은 테스트 프로그램 모든

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
void main(void) 
{ 
int a; 
char s[3]; 
s[0]='1'; 
s[1]=' '; 
s[2]='2'; 

sscanf(s,"%d",&a); 
printf("%d",a); 
} 
+0

값이 쉼표로 구분되어 있으며 형식 문자열이 지정되어 있습니까? – Mauren

+0

'fgets()'함수를 사용하여 입력 파일의 첫 x 문자를 직접 읽을 수 있도록 코드를 변경할 수도 있습니다. – Mauren

답변

2

첫째, 난 당신이 작은 테스트를 만들기 위해 조언 .

그런 다음 형식 문자열에서 ,자를 제거하십시오. 그것이 작동하는지 확인하십시오.

fscanf() 및 파생물이 스캔 할 때 전체 패턴과 일치하므로 원본 데이터에 쉼표가없고 형식이 쉼표 인 경우 무시할 수 있으므로이 동작이 발생합니다.

+1

올바른지, 숫자는 쉼표가 아닌 공백으로 구분해야합니다. 쉼표를 제거했지만 여전히 동일한 결과를 제공합니다. –

+0

제가 볼 수 있듯이, 줄의 첫 번째 값은 문자열입니다. 첫 번째 형식 매개 변수를 '% s'(으)로 변경하고 첫 번째 변수 유형도 변경하십시오. – Mauren

+0

그게 문제를 해결했습니다, 지금은 올바르게 –

관련 문제