2016-06-29 3 views
0

다음 코드를 실행하려고합니다. scanf가 두 번째 인수를 읽지 않습니다.

는 I는 scanf 함수 030@로 시작하는 세 번째 문자열의 첫 두되는 정수로, 세 가지 입력 받아 싶다.

프로그램이 잘 컴파일되지만 좌표 및 관련 @ 심볼을 입력하려고하면 y 좌표에 0이 표시됩니다.

왜 이런 일이 일어나는 지 또는 내가 고칠 수있는 조치를 아는 사람이 있습니까? 아래 코드


#include <stdio.h> 

int main(){ 
    int grid[30][30]; 
    int i, j; 

    for(i=0; i<30;i++){  
     for(j=0; j<30;j++){ 
      grid[i][j]='.'; 
     } 
    }  

    int x_coord; 
    int y_coord; 
    char type[2]; 

    scanf("%d %d %s",&x_coord,&y_coord,type); 

    /*added extra whitespace*/ 
    printf("%i %i %s",x_coord,y_coord,type); 
    printf("\n"); 

    grid[x_coord][y_coord]=type[1]; 
    //end outer loop 

    for(i=0; i<30;i++){ 

     for(j=0; j<30;j++){ 
      printf("%c",grid[i][j]); 
     } 
     printf("\n"); 
    } 

    return(0); 
}//end main 
+0

으로 큰 액세스하여 X를 얻을 수있는'문자 유형 [2] ' – BLUEPIXY

+2

귀하의 의견은 무엇입니까? 그리고 그것은 모두 한 줄에 있습니까? 또한 [mcve]를 제공하는 것이 좋습니다. 특히이 추적 오류를 해결하는 데 매우 도움이 될 수 있습니다. –

+0

'scanf()'함수 군을 호출 할 때 항상 작업이 성공적으로 수행되었는지를 확인하기 위해 반환 값 (매개 변수 값이 아닌)을 확인하십시오. 게시 된 코드에서 반환 값은 3이어야하며 다른 값은 오류를 나타냅니다. '% s'형식 지정자를 사용할 때 항상 최대 길이 수정 자 (입력 버퍼의 길이보다 작은 것) – user3629249

답변

3

당신은 char type[2];을 선언하고 그래서 당신은 char type[3]; 이런 식으로 선언해야하므로 유형에이

type[0] = @

type [1]='\0'

같이 갈 것입니다 먼저 @를 입력 한 후 새로운 캐릭터가 X을 가정으로 그래서 그

type[0] = @

type [1]='X'

type [2]='\0'

은이 방법을 저장하고 당신이 필요로 type [1]

1

당신은 X가 어떤 하나의 문자가 문자열에 대한 @X을 entrering하는 가정이다, scanf와 함께 유형을 채우기 위해 시도하는 것입니다 '@' 'X'와 '\ 0 '(문자열의 끝을 표시하기 위해 scanf가 null 바이트를 더함)

3 바이트가 2에 대해 충분히 큰 배열에 저장됩니다.

관련 문제