为什么scanf放在while(1)外面会出现死循环,放在里面就不会。

m0_56972927 2021-04-07 09:48:22
#include<stdio.h> int main() { char c; scanf("%c",&c); while(1) { if(c=='#')break; if(c>='A'&&c<='z')c-=32; printf("%c",c); } return 0; }
...全文
417 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-03
  • 打赏
  • 举报
回复
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
philobing 2021-04-07
  • 打赏
  • 举报
回复
NorZ 2021-04-07
  • 打赏
  • 举报
回复
因为你的循环条件是 1 ,永远为 true,scanf 又在循环外面,导致你没有机会重新输入 c 来更新 c 的值 而 scanf 放在循环里,由于 scanf 本来是阻塞等待输入,因此每一次循环你都可以重新输入 c ,这样你就有机会来退出循环,比如输入 #
qzjhjxj 2021-04-07
  • 打赏
  • 举报
回复
把 scanf("%c",&c);放在while(1){......}外面,只读取键盘输入一次,如果这一次机会if(c=='#')break;没把握住,当然死循环了,while(1)是永远为真。当把 scanf("%c",&c);放到while(1){}内时,就会不停的去读键盘输入,然后if(c=='#')break;判断,就有无限次机会了退出了。
自信男孩 2021-04-07
  • 打赏
  • 举报
回复
不一定呢,如果一开始就输入#就break出循环,不会出现无线循环了。
如果一开始不是输入#,那么while没有break的条件,因此会死循环~

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧