scanf()函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。
例如输入三个整数“%d%d%d”,输入时可以用一个回车符作为每两个输入的数之间的间隔。
scanf()在读取数值时会跳过空格、制表符和换行符
但在读取字符时,不会跳过这些符号
getchar()函数的功能是接收一个从键盘上输入的字符
先看下面的scanf输入三个字符
运行时为什么到了 b的时候输入不了呢?
当输入完a的值 ‘ * ’ 按下enter键,相当于输入了两个字符:‘ * ’ 和 ‘ \n ’
‘ \n ’被b接收
然后程序再向下走,等着你输入c的值
你输完了 ‘ + ’ ,被c收到
所以显示的时候,会按顺序显示a,b,c的值:a= ‘ * ’ ,b= ‘ \n ’,c= ‘ + ’
最后,如果在scanf后面加上一句 getchar();
当你输入一个字符回车时,字符放到a里面,接着的 \n 被getchar()接收掉
此时,在输入缓冲区里就不存在换行符 \n 了
再输入一个‘ * ’ ,回车
同样 b 收到的是 ‘ * ’ ,换行 \n 被getchar()接收掉
再输入一个‘ @ ’ ,回车
同理,c收到‘ @ ’ ,换行 \n 被getchar()接收掉