关于昨天敲的训练

int main(){
	int passwords1 = 0;
	int passwords2 = 0;
	int passwords3 = 0;
	int clean = 0;
	printf("请输入你的银行卡密码\n");
	scanf("%d", &passwords1);
	printf("请再次确认您的银行卡密码(Y/N)\n");//所以在这行代码后就要清理缓冲区
	//getchar();//处理缓冲区 但是这种只会清理掉一个字符可能会出现多个字符残留未被读取
	while ((clean = getchar()) != '\n')//一直循环清理直至换行转义符
	{
		;
	}
	int checking1 = getchar();//scanf在读取完数据后会在"缓冲区"留下一个\n,导致了getchar直接读取了,所以会直接跳到default
	if (checking1 == 'Y')
		printf("确认成功!\n");
	while (checking1 == 'N')
	{
		printf("请重新尝试.\n");
		printf("请输入你的银行卡密码\n");
		scanf("%d", &passwords2);①①①①①①①
		while ((clean = getchar()) != '\n')
		{
			;
		}
		printf("请再次确认您的银行卡密码(Y/N)\n");
		int checking2 = getchar();
		if (checking2 == 'Y')
		{
			printf("确认成功\n");
			break;
		}
			
		if (checking2 == 'N')
		{
			continue;
		}
		else
			continue;
	}
	while(checking1 != 'Y' && 'N')
	{
		printf("请核对输入!\n");
		printf("请再次输入您的银行卡密码!\n");
		scanf("%d", &passwords3);②②②②②②
		while ((clean = getchar()) != '\n')
		{
			;
		}
		printf("请再次确认您的银行卡密码(Y/N)\n");
		int checking3 = getchar();
		if (checking3 == 'Y')
			printf("确认成功\n");
		if (checking3 == 'N')
		{
			printf("请重新尝试\n");
			continue;
		}
		else
			continue;
	}
	return 0;
}

问题就出现在passwords2和3那里,不仅getchar函数会读取到\n.scanf函数也会把\n读取了,导致passwords2/3读取到的输入内容就是\n\n,于是就出现了直接跳到下面的printf("请再次确认您的银行卡密码(Y/N)\n")那里,所以只需要在scanf函数前面加上一段清除\n的指令就行了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值