2012-03-07 2 views
-2
int t,r,c; 
    int matrix[100][100][100]; 
    int i,j,k=0,l=0; 
    int te,ck=0; 
    scanf("%d",&t); 
    for(te=0;te<t;te++) 
    { 
      printf("RC"); 
      scanf("%d %d",&r, &c); 
      for(i=0;i<r;i++) 
      { 
        for(j=0;j<c;j++) 
        { 
          printf("te= %d i= %d j= %d",te,i,j); 
          fflush(stdin); 
          matrix[te][i][j] = getchar(); 
        } 
      } 
    } 

образца о/рвложенного цикла: внутренний цикл пропускается один раз, когда выполняется

[email protected]:~/Desktop$ ./spoon.o 
3 
RC3 
6 
te= 0 i= 0 j= 0te= 0 i= 0 j= 1 

Контроль непосредственно запрашивает значение для J = 1 и у = 0 skipped.WHY?

+1

Вы не должны компилировать ваши исполняемые файлы с '.o' расширений. '.o' используется для обозначения объектного файла. – meagar

+0

Обратите внимание, что 'fflush (stdin)' действительно определен только в Windows (хотя справочная страница Linux также ссылается на эту возможность, но не ясно, что она действительно работает). Стандарт C оставляет его неопределенным. –

ответ

2

fflush(stdin) не является способ очистить входной буфер. Использование:

void flushInputBuffer(void) 
{ 
    int c; 
    while((c = fgetc(stdin)) != EOF && c != '\n'); 
} 
+0

Ваш ответ абсолютно прав, однако вы могли бы назвать свою функцию чем-то иным, чем 'fflushstdin'? ;п. Это не то, что делает операция флеша, так что, возможно, имя, подобное 'drain', или что-то было бы лучше. – FatalError

+0

@FatalError: ха-ха, сделано!^_ ^ – noMAD

1

Это потому, что getchar() все еще видит новую строку, введенную после 6, поэтому ее не нужно блокировать и ждать большего ввода от вас. Я полагаю, что getchar() - это не функция, которую вам нужно звонить.

0

Переходя к STDIN fflush() неверен. Он должен использоваться только в потоке вывода.

Это мне не ясно из вашего выхода, но если вы набрали 3 < ввести введите > в приглашении RC, первый GetChar() захватывает символ новой строки вы ввели в конце этой линии.

Попробуйте изменить эту строку:

scanf("%d %d",&r, &c); 

Для этого:

scanf("%d %d\n",&r, &c); 
Смежные вопросы