2016-11-14 9 views
2

Точка кода предназначена для создания двумерного массива измерений, заданного пользователем. После запроса ширины и высоты пользователь должен поместить значения char в каждую позицию в 2D-массиве. Когда реализовано с int: (int mat, int value), алгоритм работает нормально, однако при попытке реализовать с char (char mat, char value) результат не согласуется с целочисленной версией. Единственными изменениями являются тип массива и значение, а также установка scanf/printf("%d") на scanf/printf("%c). Как вы можете реализовать этот 2D-массив с символами?Как заполнить двумерный массив символами в C?

#include <stdio.h> 

int main() { 

    int width; 
    int height; 

    printf("Enter col and row values between 2 and 20.\n"); 
    scanf("%d %d", &width, &height); 
    printf("The numbers you typed was %d %d\n", width, height); 

    char mat[height][width]; 
    int i; 
    int j; 
    char value; 

    for (i = 0; i < height; i++) { 
     for (j = 0; j < width; j++) { 
      printf("Enter your value.\n"); 
      scanf("%c", &value); 
      mat[i][j] = value; 
     } 
    } 

    for (i = 0; i < height; i++) { 
     for (j = 0; j < width; j++) { 
      printf("%c", mat[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

ответ

0

Изменить это заявление следующим образом

scanf(" %c", &value); 
     ^^^^ 

изменить Также это заявление что-то вроде

printf("Enter your character value: "); 

что это будет более понятным, что программа ожидает ввести.

1

... вывод не согласуется с целым версии

Ну, конечно, нет. Это будут символы, а не целые числа. В противном случае это будет одно и то же.

Кроме того, ваш входной цикл действительно странный.

for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("Enter your value.\n"); 
     scanf("%c", &value); 
     mat[i][j] = value; 
    } 
} 

Кажется, что вы пытаетесь вызвать каждого персонажа, но тогда вы читаете только один символ. Я не представляю, как вы ожидаете, что кто-нибудь сможет это использовать. Если я хочу ввести «А», я набираю «А», но потом ничего не произойдет, пока не нажмем «Ввод». Но это будет вводить два символа. Таким образом, этот код выглядит несколько плохо спроектированным.

Как быстро исправить, вы можете попробовать что-то вроде:

for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("Enter your value.\n"); 
     do scanf("%c", &value); 
      while (value == '\n' || value == '\r'); 
     mat[i][j] = value; 
    } 
} 
+0

Или используйте 'scanf ("% c ", ...)'. Но, конечно, это предотвращает фактическое вложение любых пробельных символов, если это желательно ... – twalberg

+0

Цикл 'do' /' while' является фиктивным. Вместо этого вы можете сначала игнорировать ожидающие новые строки с помощью 'scanf ("% * [\ r \ n] ");' и затем читать символ с 'value = ''; scanf ("% c", & value); ' – chqrlie

Смежные вопросы