2014-11-17 2 views
0

У меня есть простой код на С следующим образом:GetChar вопрос, когда проверка чтения полукокса на клавишу ввода

#define RECORDS_PER_PAGE 24 

int main(void) { 
    int i = 0, n; 
    char pause_char; 

    printf("Enter a number as the stop point: "); 
    scanf("%d", &n); 

    while (++i <= n) { 
     printf("i is: %d\n", i); 
     if (i % RECORDS_PER_PAGE == 0) { 
      printf("Press Enter to continue..."); 
      while((pause_char = getchar()) != '\n'); 
     } 
    } 
    return 0; 
} 

Проблема в том, когда я вхожу 30 в качестве точки останова, я получил следующий вывод:

я это: 1
я есть: 2
я есть: 3
...
я это: 24
Нажмите Enter, чтобы продолжить ... я это: 25
...
я есть: 30

Я ожидаю, что стоп-программа, когда если условие удовлетворяет. Но это продолжается, не обращая внимания на getchar. Но самое странное, когда я вхожу в примере 60, в качестве точки останова это даст следующий результат:

я есть: 1
я есть: 2
я есть: 3
...
я это: 24
(1) Нажмите Enter для продолжения ... я есть: 25
...
я есть: 30
...
я есть: 46
я есть: 47
я есть: 48
(2) Нажмите Enter, чтобы продолжить ...
я есть: 49
...
я есть: 59
я это: 60

Он остановится (2), но не (1). Я теперь что, возможно, что-то в буфере вызывает эту проблему, но я не понимаю, почему. Есть ли для этого объяснения?

+1

GetChar возвращает Int не символ – pm100

+1

'зсапЕ ("% d", &n);' -> 'зсапЕ ("% d% * с", &n); ' – BLUEPIXY

+0

@BLUEPIXY, спасибо – sadrzadehsina

ответ

1

Проблема заключается в том, что когда вы читаете ввод, вы завершаете ввод, нажимая кнопку ENTER, тем самым давая вам свой номер и \n, например 30\n.

Так ваш scanf считывает номер и оставляет \n в stdin буфере, затем getchar() приходит и читает байты, в \n.

Простое, но уродливое решение, добавьте еще getchar() для чтения \n. (Nicer способ справиться с этим в вашем scanf читать непосредственно.)

+0

Спасибо. Я добавляю еще один getchar(), и он решает проблему. Но вы бы объяснили, как обрабатывать его в scanf. – sadrzadehsina

+0

ok, я нашел его. – sadrzadehsina

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