C语言scanf多余的输入项,聊聊C语言中scanf()如何解决输入缓冲区残留‘/n’的有关问题...

本文讨论了C语言中使用scanf()函数时如何处理输入缓冲区残留的换行符' ',并提供了多种解决方案,包括使用空格、%s、%*[^ ]等方法,以及对fflush(stdin)的讨论,指出其在清除输入缓冲区的不确定性。
摘要由CSDN通过智能技术生成

聊聊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]");

大牛!这个看似很厉害,但是是放进去没有任何反应,该过还是过了。

120618249.gif

手误, 多谢了个符号. ^去掉.

scanf("%*[\t\n\r]");

------解决思路----------------------

在每个最后不带\n的printf后面加fflush(stdout);

在每个不想受接收缓冲区旧内容影响的scanf前面加rew

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值