2015-10-20 8 views
0

Я работаю над назначением для решения лабиринта, созданного из массива символов 2d. Чтобы проверить программу, я сделал простой лабиринт 4x4. Но лабиринт, при печати на экране, состоит из цифр. Я очень смущен тем, как это происходит. Любая помощь будет оценена по достоинству.Номера символов массива символов, введенные назначенными символами

Назначение заключается в следующем:

char *maze[4][4]; 
for (int i=0; i < 4; ++i) 
{ 
    maze[0][i] = "#"; 
    maze[3][i] = "#"; 
    maze[1][i] = "."; 
} 
maze[2][0] = "#"; 
maze[2][3] = "#"; 
maze[2][1] = "."; 
maze[2][2] = "."; 

и печать здесь:

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

Я ожидал, что напечатать это:

#### 
.... 
#..# 
#### 

Но вместо этого она печатает:

0000 
2222 
0220 
0000 
+0

Посмотрите значение ''% c "' в документации 'printf'. – juanchopanza

+0

Добро пожаловать в Stack Overflow, и спасибо за ваш вопрос! Пожалуйста, прочитайте краткую вводную [тур].В нем упоминается [Справка]; например, помощь по форматированию может быть найдена в [Как отформатировать мои сообщения с помощью Markdown или HTML?] (http://stackoverflow.com/help/formatting). – usr2564301

+0

Большое вам спасибо. Это помогло мне и лабиринту печатать правильно сейчас. Еще раз Большое вам спасибо –

ответ

5
maze[0][i] = "#"; 

должен быть

maze[0][i] = '#'; 

и char *maze[4][4]; должны быть char maze[4][4];

"#" строковый литерал, используйте '#' иметь символьную константу.

Если вы действительно хотите использовать строковые литералы одного символа, вы должны использовать спецификацию преобразования %s вместо %c в своей оригинальной программе.

+0

'maze' - массив' char * '. – juanchopanza

+0

@juanchopanza Я сделал в редактировании в то же время, что и ваш комментарий, по-видимому – ouah

5

Проблема заключается в этой строке

printf("%c",maze[i][j]); 

вы не используете символы, а символьные указатели (так называемые строки), так что это должно идти, как:

printf("%s",maze[i][j]); 

Или вы можете также использовать символы вместо как описано в другом ответе.

0

В вызове printf есть неправильное совпадение. Вы печатаете maze[i][j], который является char * (строка), в качестве символа (%c). Я предлагаю включить предупреждения компилятора, чтобы поймать подобные ошибки; gcc обнаружил проблему, когда я попытался скомпилировать ваш код.

Причина, по которой он печатает число вместо символа, состоит в том, что printf интерпретирует адрес строки maze[i][j] как точку кода ASCII и печатает соответствующий символ. Для вас, компилятор, адреса "#" и "." приводят к печати символов 0 и 2. В моем случае это было по-другому; когда я скомпилировал ваш код, программа печатала EOT и ACK.

Лучшим решением было бы объявить maze как массив из char s вместо строк.

char maze[4][4] = { 
    { '#', '#', '#', '#' }, 
    { '.', '.', '.', '.' }, 
    { '#', '.', '.', '#' }, 
    { '#', '#', '#', '#' } 
}; 
Смежные вопросы