聊聊C语言中scanf()怎么解决输入缓冲区残留‘/n’的问题
聊聊C语言中scanf()怎么解决输入缓冲区残留‘/n’的问题
因为 scanf %c 只是读入一个字符,而你在输入时实际上输入的是:某个字符
+Enter,Enter 产生的\n 也会停留在输入缓冲区中,下次调用 scanf %c 时就会直接读到
它而不是等待你再次输入!
#include
int main(void)
{
int n = 0;
char ch = 0;
printf("Input n: ");
scanf("%d", &n);
printf("Input A - D: ");
//scanf("%c", &ch); //方法1:消除上一个'/n' 有效
//fflush(stdin); //方法2:消除上一个'/n' 无效
//scanf(" %c", &ch); //方法3:(前边添加一个空格)消除上一个'/n' 有效
scanf("%c", &ch); //大家都用什么方法,为什么fflush不可以呢?
printf("\n");
if (ch == 'A')
{
}
else
{
}
printf("This Program is end!\n");
return 0;
}
------解决思路----------------------
其实我觉得用
char ch[2];
scanf("%s", ch);
就可以避免这个问题了。。
------解决思路----------------------
scanf("%*[^\t\n\r]");
------解决思路----------------------
//scanf(" %c", &ch); //方法3:(前边添加一个空格)消除上一个'/n' 有效
我一般都用这个办法
------解决思路----------------------
scanf(" %C", &ch);
------解决思路----------------------
深入理解“流”这个概念。
理解后就知道可以“吸收”\n,可以忽略。
------解决思路----------------------
引用:Quote: 引用:scanf("%*[^\t\n\r]");
大牛!这个看似很厉害,但是是放进去没有任何反应,该过还是过了。
手误, 多谢了个符号. ^去掉.
scanf("%*[\t\n\r]");
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rew