Day 5 求助Help

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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值