scanf( )与getchar( )使用注意

函数名: scanf
功 能: 执行格式化输入
用 法: int scanf(char *format[,argument,…]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
函数名:getchar
功能:从计算机终端(一般是键盘)输入一个字符。

读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键

直接上测试代码:

#include <stdio.h>
int main(void)
{
    char chA,chB;
    int a,b;
    int i = 0;
 
    while (i < 3) {
        scanf("%c%3d%c%2d",&chA,&a,&chB,&b);
        //getchar();//此处重点,加上getchar程序运行正确!
				printf("+b:%d\n",b);
        b += a;
        printf("cha:%c...chb:%c\n",chA,chB);
				printf("a:%d\n",a);
        printf("b:%d\n",b);
        i++;
    }
    return 0;
}

运行结果如下:

红色标记为输入字符,其他为打印出来的
!]
分析:
首次输入:H123i45 运行打印正确
但是第二次输入H123i45
变量cha存入的是:回车
变量b存入的是:168为上次运算的值

说明:第一次执行的结果遗留下回车字符 被scanf读取到,因其以Space、Enter、Tab结束一次输入,所以,在变量cha为回车后,其后续变量不在读取直接跳过(未被第二次输入改变的变量:a=123、chb=‘i’、b=168)
所以第二次加法运算其b值为291=168+123

参考文章地址1
参考文章地址2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aron566

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值