Чтение ввод ключа в цикле в C - PullRequest
3 голосов
/ 22 августа 2011

Как я могу прочитать ключ ввода в цикле несколько раз?

Я пробовал следующее без результата.

char c;
for (i=0; i<n; i++){
    c = getchar ();
    fflushstdin ();
    if (c == '\n'){
        //do something
    }
}

И fflushstdin:

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

Если я читаю любой другой символ вместо клавиши ввода, он отлично работает, но с клавишей ввода В некоторых итерациях мне приходится нажимать клавишу ввода 2 раза.

Спасибо.

РЕДАКТИРОВАТЬ: IЯ выполняю программу через putty на Windows, и программа работает на виртуальной Linux-мяте на виртуальном компьютере.

Ответы [ 4 ]

4 голосов
/ 22 августа 2011

Почему вы вызываете fflushstdin ()?Если fgetc () возвращает что-то отличное от \ n, этот символ полностью удаляется.

Это должно работать:

char prev = 0;

while(1)
{
    char c = getchar();

    if(c == '\n' && prev == c)
    {
        // double return pressed!
        break;
    }

    prev = c; 
}
2 голосов
/ 22 августа 2011

Попробуйте

if (ch == 13) {
  //do something
}

ASCII-значение ввода равно 13, иногда \ n не будет работать.

0 голосов
/ 22 августа 2011

Вы всегда выполняете getchar дважды (даже если в этом нет необходимости). Попробуйте ограничить звонки до fflushstdin:

char c;
for (i=0; i<n; i++){
    c = getchar ();
    if ((c != EOF) && (c != '\n')) fflushstdin ();
    if (c == '\n'){
        //do something
    }
}
0 голосов
/ 22 августа 2011

Вы должны использовать:

char c;
for (i=0; i<n; i++){
    c = getchar ();
    fflushstdin ();
    if (c == 13){
        //do something
    }
}

, поскольку 13 - это код ASCII для клавиши Enter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...