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的指令就行了.