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; }
我这里的想法是:
①一开始输入Y直接结束
②一开始输入N就会进入一个新过程并且要求重新进行输入步骤,然后再输入Y或者N,如果还是N就会开始循环
③没按要求输入Y或者N时,就要重新进入输入步骤
然后出问题了...
①没有问题但是在②输入Y后又开始新一轮循环,并没有结束代码甚至输出"确认成功"
第二个问题时②或者③中如果没按要求输入Y或者N时,输出的内容就会直接跳过输入(passwords2以及passwords3那里),具体情况就是这样
能不能来一个高手解救一下,修了半个小时还是不懂😭😭
接下来就是一天的积累
分支语句
if和else
在这两个语句下如果需要输出内容,且内容多于1句,就需要用{},不然计算机读取时会将内容覆盖导致输出内容只有最后的printf
#include <stdio.h>
int main()
{
int a = 18;
if (a <= 100)
printf("咕咕咕");
printf("咕咕");//如果这里没加大括号{}就会把else顶掉,导致报错
else
printf("摸鱼");
printf("摸大鱼");//如果这里没加大括号{}输出的结果只有摸大鱼
return 0;
}
还有一种读取情况
虽然符合语法但是和我们需要的逻辑完全反了
int main()
{
int age = 24
if(age<18);
printf("小屁孩");
else if(18<=age<=22)//这里输出结果发现大学牲,原因是计算机先读取的18<=age,这里判断为真所以就是1,而1又符合22,导致条件满足输出else if结果.
如果要解决这个结果就需要更合理地安排语法
else if(age>=18 && age<=22)
printf("大学牲");
return 0;
}
Switch语句
switch取英文翻译:替换 + 需要用到的case:把...放入
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int test1 = 0;
scanf("%d", &test1);
switch(test1)
{
case 1:
printf("一");
case 2:
printf("二");
case 3:
printf("三");//但是这样写会发现一个问题,如果输入1的话 一二三都会输出,所以可以得出在这个语句中,输入几就从几开始并且一直输出到switch结束.
//所以就需要用到break了
//break的作用是停止该进程
case 1:
printf("一");
break;
case 2:
printf("二");
break;
case 3:
printf("三");
break;//这里输出几就是对应的了
//还有一个default,用法是除了case能匹配的
default:
printf("无法输出巴拉巴拉");//也就是说如果这里输入除1,2,3外的数都会显示这串
return 0;
}