getchar函数使用心得

        首先getchar的数据类型是整型,可以理解为字母对应的ASCII码;

	int ch;
	while((ch = getchar()) != EOF)
	{
		putchar(ch);
	}

	
	return 0;

        当在运行上面这段代码时发现,每次输出时他都会自动换行,那么为什么会出现这种现象呢。比如输入的字符串是a,在输入的同时会按下回车键,此时程序会将字符a以及\n存储到输入缓冲区中,当getchar函数看到输入缓冲区中有东西,那么他就会开始读入,第一次循环读入a,第二次循环读入\n,通过putchar函数输出后就会出现换行的情况。

        利用这个性质来解决一下下面这个问题

	char password[10]={0};
	printf("请输入密码:>");
	scanf("%s",password);
	printf("请确认密码(Y/N):>");
	int a = getchar();
	if(a == 'Y')
		printf("Yes");
	else
		printf("No");
	
	return 0;

在输入密码以及回车之后程序便停止运行

其原因就是因为我们输入完密码的同时按下了回车,此时输入缓冲区中存放的是密码加上\n,而scanf函数只能读取缓冲区中的密码,此时缓冲区中还剩下\n,直接被getchar()读取,显然if语句的条件不成,因此输出No;

为了解决这种情况,我们可以想办法在scanf函数读取完输入缓冲区中的密码后,将剩下的\n清空,因此可以进行以下操作

	char password[10]={0};
	printf("请输入密码:>");
	scanf("%s",password);
	getchar(); 
	printf("请确认密码(Y/N):>");
	int a = getchar();
	if(a == 'Y')
		printf("Yes");
	else
		printf("No");
	
	return 0;

通过getchar(),读取到输入缓冲区中的\n,间接清空了输入缓冲区,便能正常运行

当然上述代码仍然存在一定问题,比如当输入中带有空格时,比如输入为QWE  ASD时,输出有一次出现错误,这里是因为scanf函数在遇到空格时就会停止读取,因此在scanf函数读取玩之后,输入缓冲区中还剩下"  ASD\n",而一个getchar()函数只能帮助清空一个字符,所以为了更好的解决这类问题,可以采取如下操作

	char password[10]={0};
	printf("请输入密码:>");
	scanf("%s",password);
	while(getchar() != '\n');
	printf("请确认密码(Y/N):>");
	int a = getchar();
	if(a == 'Y')
		printf("Yes");
	else
		printf("No");
	
	return 0;

只需要加入一个while循环,将输入缓冲区中剩余的字符清理干净即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值