while(1)会死机吗

while(1)会死机吗,第1张

while(1)会死机。Windows采用消息机制,每个窗体有一个消息线程,用于响应用户事件(鼠标、键盘等),也就是一个消息队列,在一个事件里使用While(1)相当于把消息线程阻塞了,后面的消息一直卡在消息队列里,卡到一定程度,就界面就停止响应了。有一个技巧,就是在while(1)里插入一行处理windows消息的语句,相当于释放一下CPU让消息线程继续跑一跑,这样就不会卡死了。

程序问题不少。

首先解释while循环,这就是一个无限循环,没有退出机制,退出需要强制退出。从逻辑上,接收键盘某个键,判断为退出程序是可以的。

其次,程序运行“卡”在那里(不进行下一次循环),是因为子函数中scanf在等待键盘输入,输入一个字符(并回车)程序会继续,但这个语句写的有问题,会死机。正确写法是:

scanf("%c", &inchar) //inchar加上地址符

不过即使修改了死机问题,这个程序距离图中要求还差很远。无论是界面刷新机制、键盘接收机制还是控制机制,在纯控制台程序下解决都是很麻烦的。一般建议这样的程序用图形界面完成(比如MFC单文档)、并使用定时器(或线程)来完成控制机制。

第一个while(i>100)的循环条件应该是i<100,而不是i>100

这样i从0开始,才能在执行100次循环后自增为100,然后跳出循环

如果是while(i>100),第一次循环后i=1,不满足1>100,直接就跳出while了

还有第二个while(a%7==0||i>=100)该语句没必要用while吧?如果满足while条件的话,程序就死循环在while中了,改成直接用if判断一下就好:

if (a%7==0 || i>=100)

printf("游戏结束,都是大佬!\n")


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11291252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存