getchar()和scanf()输入遗留一个换行符的问题。

getchar()和scanf()输入遗留一个’\n’的问题。

当程序需要多次从控制台键盘输入获取一个字符或者字符串时,第二次获取程序会自动获取一个'\n',导致不能正常获取需要的数据。
例子如下:
#include<stdio.h>
int main(void)
{
	char ch1,ch2;
	printf("input the first code: ");
	scanf("%c",&ch1);
	printf("input the second code: ");
	scanf("%c",&ch2);
	printf("they are %c,%c",ch1,ch2);
	return 0;
}
程序执行结果:

在这里插入图片描述
执行过程:
1.先走到第一条提示打印,然后卡在scanf这里等着从键盘获取一个字符;
2.输入数据1和回车,也就是 ’ 1 ’ 和 ’ \n ';
3.打印第二条提示,不会卡在第二个scanf这里等着输入,直接默认输入的是空;
4.打印两个字符里面存储的东西,ch1是 ’ 1 ’ ,ch2是 ’ \n ';
我预想的结果是输入1,然后再输入2,然后这两个字符里面装的就该是1和2;但是第二个scanf输入时并没有让我输入,直接默认往里面存入 ’ \n ’ 了。

这是因为我们输入进去之后,数据是存在一个buffer里面的,若有需要(比如这里的把他存在ch1里面),就会去这个buffer里面读取数据,第一次输入其实是两个字符,’ 1 ’ 和 ’ \n ',第一次存入ch1时将 ’ 1 ’ 存进去了,但是 ’ \n ’ 还在这个buffer里面。第二次再去读取这个buffer的时候,就直接读取到 ’ \n ’ ,所以ch2里面装的是 ’ \n '。

解决这个问题的方法很简单,既然问题的原因是因为在buffer里面还剩下一个 ’ \n ’ 没被读取,那么只需要每次读取之后,把这个 ’ \n ’ 清除就可以了。(好像是有专门的清除这个buffer的函数,但是这里我用不着,若有需要再补上)

示例

#include<stdio.h>
int main(void)
{
	char ch1,ch2;
	printf("input the first code: ");
	scanf("%c",&ch1);
	printf("input the second code: ");
	while(getchar()!='\n');
	scanf("%c",&ch2);
	printf("they are %c,%c",ch1,ch2);
	return 0;
}

只需要在第二次之前,加一句while(getchar()!=’\n’);
原理就是用getchar()函数把buffer里面的剩余的 ’ \n ’ 读取掉,清空这个buffer。
结果:
在这里插入图片描述
只需要在第二次之前,加一句while(getchar()!=’\n’);
原理就是用getchar()函数把buffer里面的剩余的 ’ \n ’ 读取掉,清空这个buffer;

这个问题应该只有小白才会遇到,一般实际中不会使用scanf或者getchar输入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值