2016-04-09 9 views
-1

Ich habe diese Schleife, aber wenn ich nach meinem Zeichen eingeben, es verarbeitet es und verarbeitet dann das '\ n' vor der Eingabe erneut aufgefordert. Bitte!!!! HilfeEntfernen Sie neue Zeile Zeichen aus der Konsole

int input; 



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

5[ENTER] Prozesse 5 als Eingabe, dann 10 (die ASCII- '\ n') als Eingabe, dann wieder anfordert Eingabe. Es macht mich verrückt

+1

fügen Sie einen Dummy getchar() am Ende der while-Schleife hinzu, um das '\ n' zu konsumieren – Pooya

+0

Der portable Weg, stdin zu spülen ist 'int c; while ((c = getchar())! = '\ n' && c! = EOF); ​​'. 'fflush (NULL)' löscht 'stdin' nicht, da die Standards sagen, dass' fflush (stdin); ''Undefined Behavior' ist. –

+1

Sie haben nur "0" von "Eingabe" subtrahiert. Danach testest du den * resultierenden Wert * gegen 'e' oder' \ n', also wenn du ':' drückst, wird die Bedingung wahr –

Antwort

0

Sie können Echo-Funktion der Konsole deaktivieren und nur ein Zeichen zurückgeben, wenn es nicht '\n' ist. Wenn Sie Linux verwenden, können Sie diesen Code verwenden:

#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); 
} 

zu Hide password input on terminal finden.

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

Hinzufügen eines zusätzlichen getchar() wird Ihr Problem lösen. Dies liegt daran, Geben Sie setzt 2 Zeichen auf stdin: eine und eine '\n', die Sie nicht erwarten können.

Verwandte Themen