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