2013-05-04 3 views
0

У меня есть следующая реализация считывания символьной матрицы и ее печать. Он отлично работает, но когда я даю ему матрицу, он ждет другого символа, а затем выводит матрицу должным образом. Как я могу исправить это, чтобы мне не нужно вводить другой символ?C: Логическая ошибка при вводе сканирования

Ввод пробы

3 4 
0001 
0110 
1110 

Пример вывода

0001 
0110 
1110 

Мой код

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n, m; /* n, m - dimensions of matrix */ 
    int i, j; /* i, j - iterators */ 
    char **matrix; /* matrix - matrix input */ 
    scanf ("%d %d\n", &n, &m); 
    matrix = (char **) malloc (sizeof (char *) * n); 
    for (i = 0; i < n; ++i) 
    { 
     matrix[i] = (char *) malloc (sizeof (char) * m); 
    } 
    for (i = 0; i < n; ++i) 
    { 
     for (j = 0; j < m; ++j) 
     { 
      scanf ("%c ", &matrix[i][j]); 
     } 
    } 
    for (i = 0; i < n; ++i) 
    { 
     for (j = 0; j < m; ++j) 
     { 
      printf ("%c", matrix[i][j]); 
     } 
     printf ("\n"); 
    } 
} 

Спасибо заранее.

ответ

1

Поместить пробел до%c. Если у вас есть пробелы после %c, scanf() будет продолжать читать и игнорировать все пробелы. Следовательно, вы вынуждены вводить символ без пробелов.

Изменение:

scanf ("%c ", &bitmap[i][j]); 

к:

 scanf (" %c", &bitmap[i][j]); 
+0

спасибо, что сработало –

+0

, кстати, что пробегает перед% c? –

+1

Это заставит scanf игнорировать любое количество пробелов (например, \ t, \ n, пробел и т. Д.). Если у вас есть * пробел * в формате stri ng после прочтения символа, тогда он будет читать символ для '% c', но затем будет игнорировать все пробелы. –

1

попробуйте пропустить пространство в scanf ("% c"). терминал может ожидать пробел для ввода

+0

если я принять его прочь, он поставит символы новой строки в матрицу –

+0

попробовать% s вместо% с в зсапЕ() его исключает любые непечатаемые проверки из буфера. скажите, если он работает –

0

Перед печатью символов, используя fflush(stdout);, может помочь. printf() и scanf() могут иногда быть проблематичными, когда они используются вместе.