scanf吃回车问题(只是通过例子来说明输入会吃回车的问题并给出解决方案)

首先先了解一下scanf语句
那么我们首先来了解一下scanf语句:
scanf()函数是格式输入函数,即按用户指定的格式从标准输入设备(键盘) 上把数据输入到指定地址的变量中。
读取方式:
一般格式为:scanf(格式控制,地址列表) 也就是scanf("%?",&?); 可以读取相对于类型的数值并且存储到制定变量,并且可以读取多个数值,如数字,字符,字符串等 ,每次用到scanf‘时,他都会从数据缓存区读取一个或多个字符,并存入相对应的变量。

注意:
当输入数字时不会存在吃空格等情况,用scanf在输入数字时会忽略空格 tab键 换行符;但是用scanf输入多个数时可以通过空格来控制输入的数字也可以通过回车(换行)来控制。
代码实例

     int a;int b; 
     scanf("%d %d",&a,&b);
     printf("%d %d",a,b);
     scanf("%d%d",&a,&b); 
     printf("%d %d\n",a,b);

在这里插入图片描述
但输入字符或者字符串时会考虑空格回车等情况
因为当你输入完一个字符或字符串完之后按回车(Enter),这个回车符是放在缓冲区的,并且不会舍弃最后的回车符下次输入时他就会把上次剩下的回车先输进去

但是如果出现这种情况 不要怕我们可以解决(细节决定成败这个可能酿成大错)
以下是错误的代码实例``

    char c1, c2;
    scanf("%c %c", &c1, &c2); //这里有一个空格
    printf("%d %d\n", c1, c2);
    scanf("%c%c", &c1, &c2); //这里没有空格
    printf("%d %d\n", c1, c2);

在scanf()中有空格它代表结束符(一次输入的结束)但没有也不会造成什么影响。
因为在这种情况下此处要输入两个字符再次输入时会使第二个字符进入缓冲区

 但根据以上的代码出现了以下这种情况
a b
97 98
ab
10 97

解决代码如下

    char c1, c2;
    scanf("%c %c", &c1, &c2); //这里有一个空格
    printf("%d %d\n", c1, c2);
    scanf(" %c%c", &c1, &c2); //这里没有空格    
    printf("%d %d\n", c1, c2);

再第二次输入开始时再前面加一个空格表示结束输入(默认情况下空格表示结束),所以空格就被释放掉而结束而不会被输进去在前面

注意:
也可以加\n它也有同样的作用,但切记不要在输入的最后。
如果加上的话不是表示接受一个回车符,而是表示忽略所有的空白字符就是会让你输入任何值之后他才会输出你想要的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值