c语言单个字符输入问题

1.scanf输入一个字符

当我们用scanf输入一个字符时,分为两种情况:

1.1一次输入多个字符

整型的输入:格式符相邻,输入时中间可以加上空格或回车

//一次输入多个整型
#include<stdio.h>
int mian()
{
	int a=0,b=0;
	scanf("%d%d",&a,&b);//在输入一个整型后,输入空格,再输入另一个字符
	return 0;
}

但是如果是一次输入多个字符的情况,当我们在屏幕上输入一个字符时,不能像输入整型那样输入一个空格再输入下一个字符,这样会将空格当成一个字符赋给下一个变量,直接输入两个字符就行(情况1)
除非两个输入的格式符中间有空格隔开(情况2)

//字符
#include<stdio.h>
int main()
{
	char a=0,b=0;
	scanf("%c%c",&a,&b);//一次输入两个字符,中间不能加空格
	scanf("%c %d",&a,&b);//输入时两个字符中间需要一个空格
	return 0;
}

1.2多组输入情况

多组输入情况,大多数都是出现在循环里,如题:

KiKi想判断输入的字符是不是字母,请帮他编程实现(输入描述:多组输入,每一行输入一个字符。输出描述:针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。)

请添加图片描述
我们可以用while循环来控制scanf的输入
① scanf正常运行时,返回值是它读取的变量的个数,如果输入错误或停止,会返回EOF,EOF的值为-1

运行起来,在键盘上输入一个A,按回车使其发送给电脑;我们可以看到,屏幕上不仅出现了我们想要的结果,另一个结果也出现了;
其实出现这种情况的原因是:计算机不是直接通过键盘来读取数据,在键盘和计算机之间有一个缓冲区,计算机回到缓冲区拿去数据;而在我们输入时,其实输入了两个数据,一个是‘A’,另一个是‘\n’,而scanf在遇到(空格,换行等)停止读取数据,而‘\n’就被下一次的scanf给读走了;所以才会出现屏幕上那样输出两次;

解决办法:
getchar()
getchar可以从缓冲区读取一个字符,它的返回值就是读取到的那个字符的ASCII码值
请添加图片描述
如②所示,getchar在这里的作用就是将‘\n’给读走;
有波浪线的原因是返回值被忽略,因为我们这里只需要将字符(\n)给读走,并不需要它的返回值;

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值