2016-06-29 12 views
0

У меня есть следующий код, который я пытаюсь запустить.scanf не читает второй аргумент

Я хочу, чтобы функция scanf принять в трех различных входах, с двумя первыми целыми числами между 0 и 30 и третьей строкой, начинающейся с @.

Программа компилируется отлично, но когда я пытаюсь ввести координаты и соответствующий символ @, я получаю 0 в координате y.

Кто-нибудь знает, почему это происходит или что я могу сделать, чтобы исправить это? Ниже приведен код


#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

больше, необходимости 'символ типа [2];' – BLUEPIXY

+2

Каков ваш вход? И все ли на одной линии? Я также предлагаю вам предоставить [mcve] - это может быть очень полезно, особенно с этими трудными для отслеживания ошибок. –

+0

при вызове какого-либо семейства функций 'scanf()' всегда проверяйте возвращаемое значение (а не значения параметра), чтобы убедиться, что операция прошла успешно. В опубликованном коде возвращаемое значение должно быть 3, любое другое значение указывает на ошибку. При использовании спецификатора формата «% s», ALWAYS включает модификатор максимальной длины (то есть один меньше длины входного буфера) – user3629249

ответ

3

Как вы объявили char type[2]; и вы первый ввод @, а затем новый символ предположим X так по типу он будет идти, как этот

type[0] = @

type [1]='\0'

так что вы должны объявить char type[3]; таким образом так что

type[0] = @

type [1]='X'

type [2]='\0'

будет храниться таким образом, и вы можете получить X путем доступа к type [1]

1

Предполагая, что вы entrering @x для строки, где Х представляет собой некоторый один символ, зсапЕ будет пытаться заполнить типа с «@» «X» и «\ 0 '(нулевой байт, добавленный scanf, чтобы отметить конец строки)

Это 3 байта, которые хранятся в массиве, который достаточно велик для двоих.