从控制台中删除换行符

时间:2016-04-09 04:17:14

标签: c io getchar fflush

我有这个循环,但是当我在我的角色后面输入时,它会处理它,然后在再次请求输入之前处理'\ 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'\ n')作为输入,然后再次请求输入。它让我疯狂

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

添加额外的getchar()可以解决您的问题。这是因为 5 输入会在stdin上放置2个字符:'5''\n',这是您可能不会期望的。< / p>