2016-04-09 2 views
-1

У меня есть этот цикл, но когда я нажимаю enter после моего символа, он обрабатывает его, а затем обрабатывает '\ n', прежде чем запрашивать ввод снова. Пожалуйста!!!! ПомощьУдалить новый символ строки из консоли

int input; 



     while (true){ 
     input = getchar(); 
     fflush(NULL); 
     input = input - '0'; 
     if(input != 'e' && input != '\n') { 
      rc = state_fun(input); 
     } 

5[ENTER] процессы 5 в качестве входных данных, а затем 10 (который является ASCII '\ п') в качестве входных данных, а затем снова запрашивает ввод. Это заводит меня гайками

+1

Добавить фиктивный getchar() в конце цикла while, чтобы потреблять это '\ n' – Pooya

+0

Портативный способ сброса stdin - 'int c; while ((c = getchar())! = '\ n' && c! = EOF); ​​'. 'fflush (NULL)' не будет очищать 'stdin', потому что стандарты говорят, что' fflush (stdin); 'is Undefined Behavior. –

+1

вы просто вычитали '' 0'' из 'input'. После этого вы проверяете это * результирующее значение * на 'e' или' \ n', поэтому, если вы нажмете ':', оно сделает условие true –

ответ

0

Вы можете отключить функцию эха консоли и только откликнуть символ, если это не '\n'. Если вы используете Linux, вы можете использовать этот код:

#include <termios.h> 
#include <stdio.h> 
#include <unistd.h> 
int main(){ 
    struct termios old, new; 
    int nread; 

    /* Turn echoing off and fail if we can't. */ 
    if (tcgetattr (STDIN_FILENO, &old) != 0) 
     return -1; 
    new = old; 
    new.c_lflag &= ~(ECHO|ICANON); 
    if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &new) != 0) 
     return -1; 

    char input; 
    while (1) 
    { 
     input = getchar(); 
     if (input!='\n') 
      putchar(input); 
    } 

    /* Restore terminal. */ 
    tcsetattr (STDIN_FILENO, TCSAFLUSH, &old); 
} 

Обратитесь к Hide password input on terminal.

0
int input; 
while(true) { 
    input = getchar(); 
    getchar(); // <------ 
    fflush(NULL); 
    input = input - '0'; 
    if(input != 'e' && input != '\n') { 
     rc = state_fun(input); 
    } 
} 

Добавление дополнительных getchar() решит вашу проблему. Это связано с тем, что Ввод помещает 2 символа на stdin: a '5' и '\n', чего вы не ожидаете.

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