2016-04-09 10 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は、入力として( '\ n' はASCIIである)、10、再度入力を要求助けます。それは私をナット駆動しています

+1

whileループの最後にダミーのgetchar()を追加して、 '\ n'を消費します。 – Pooya

+0

stdinをフラッシュする移植可能な方法は 'int c; while((c = getchar())!= '\ n' && c!= EOF); '。 'fflush(stdin);は標準では未定義の動作だと言っているので、' fflush(NULL) 'は' stdin'をフラッシュしません。 –

+1

あなたは入力から '' 0 ''を引いただけです。その後、結果値*を 'e'または' \ n 'に対してテストするので、 ':'を押すと条件が真となります –

答えて

0

コンソールのエコー機能をオフにして、'\n'でない場合は、エコーバックすることができます。

#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を参照してください:Linuxを使用する場合は、このコードを使用することができます。

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

getchar()を追加すると、問題が解決します。これは、 を入力します。は、stdin'5''\n'に2文字を入力します。これは予期しない可能性があります。

関連する問題