while(1)里使用return退出循环,需要循环俩次才能退出问题

问题解决了,但是想不通其中原理,注释了输入控件,使用俩个retun等都没有解决,望大佬指点。

原失败代码:

int YearSelect()
{
	wchar_t s[5];// 定义字符串缓冲区,并接收用户输入
	int a = 1;
	ExMessage msg;
	while (1)
	{
		if (peekmessage(&msg, EM_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)
			{
				if (msg.x >= 585 && msg.x <= 695 && msg.y >= 692 && msg.y <= 733&&a==1)
				{
					
					InputBox(s, 5, L"请输入要查询的年份");
					
					clearrectangle(586, 694, 694, 731);
					a = 0;
					outtextxy(596, 690, s);
					Sleep(100);
					a = 0;	
					return 1;
				}
			}
		}  
	}
}

int main()
{
	int floor = 0;
	InitWindows();//初始化窗口,显示2022年年历
	while(true)
	{
		if (floor == 0)
		{
			YearSelect();
			floor = YearSelect();
		}
		else if (floor == 1)
		{
			MonthSelect();
			floor = MonthSelect();
		}
	}
	closegraph();
}

失败代码现象:点击YearSlect()函数里按钮后,InputBox函数输入数字并显示后,点击MonthSlect()函数里按钮没反应,说明程序没有跳到else if(floor==1)语句里,再次点击YearSlect()函数里按钮,再次出现InputBox输入框,输入后显示,此时,再次点击InputBox函数里的按钮没反应,而点击YearSlect函数里按钮成功。

解决方案:主函数While(true)里的if的判断条件用全局变量,直接在函数的while循环里修改主函数循环里的判断条件。

作用:作出类似窗口切换的效果,while(1)里使用if(floor==某个设数)来进行窗口切换,注意floor使用全局变量,第一个窗口执行完后直接在改窗口的while(1)里修改floor后使用break跳出改窗口。

修改后成功的代码: 

int floor = 0;

int YearSelect()
{
	wchar_t s[5];// 定义字符串缓冲区,并接收用户输入
	int a = 1;
	ExMessage msg;
	while (1)
	{
		if (peekmessage(&msg, EM_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)
			{
			  if (msg.x >= 585 && msg.x <= 695 && msg.y >= 692 && msg.y <= 733 && a == 1)
				{

					InputBox(s, 5, L"请输入要查询的年份");
					clearrectangle(586, 694, 694, 731);
					a = 0;
					outtextxy(596, 690, s);
					Sleep(100);
					floor = 1;
					return 1;
				}
			}
		}
	}
}


int main()
{
	InitWindows();//初始化窗口,显示2022年年历
	while(true)
	{
		if (floor == 0)
		{
			YearSelect();
		}
		else if (floor == 1)
		{
			MonthSelect();
		}
	}
	closegraph();
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值