C语言的格式化输入将回车输入的问题

在C语言中,使用scanf进行格式化输入字符时需要注意回车的影响。如果直接输入1并回车,回车会被存储到变量中。解决方法包括在scanf中增加额外的字符接收回车,或者在%符号前加空格来跳过空白字符。通过这些修改,可以确保输入的字符不包含回车,并避免键盘缓冲区的残留影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 当格式化输入字符时 如:
scanf("%c",&k);  要特别注意将回车输入的情况;

while(1)
    {
        i++;
        scanf("%c",&k);
        printf("k = %c\n",k);
        printf("i = %d\n",i);
    }
运行结果:
输入:1
输出:k = 1
          i =  1
           k =
           
            i = 2
显然,格式化输入将回车输入到了变量中;
解决办法:
把例子改成如下
while(1)
    {
        i++;
        scanf("%c%c",&k,&m);//用m来接收回车
        printf("k = %c\n",k);
        printf("i = %d\n",i);
    }

while(1)
    {
        i++;
        scanf(" %c",&k);//%c前有空格
        printf("k = %c\n",k);
        printf("i = %d\n",i);
    }
输入:1
输出:k = 1
           i = 1
输入:2
输出:k = 2
      i = 2
结果正常了;
原因:键盘缓冲区残余信息。我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了下一个循环的k;
还可以在下一此输入前加fflush(); 清除一个流
2 scanf 返回值为成功输入了几个参数;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值