黑马程序员技术交流社区

标题: 请问 关于while语句的问题 [打印本页]

作者: neobug    时间: 2015-7-2 23:02
标题: 请问 关于while语句的问题

下面代码  输入   随便一个  wsad  会一直循环
  需要把 第8 行 放到  while 里面  才正常
  请问这是为什么啊?
作者: neobug    时间: 2015-7-2 23:03

  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3. // 定义变量
  4.     char ch;
  5.     printf("请输入指令: w.上 s.下 a.左 d.右\n");
  6.     scanf("%c",&ch);
  7.     while (1) {
  8.         
  9.    
  10.    
  11.    
  12. //    输入指令
  13.     switch (ch) {
  14.         
  15.     case 'w':
  16.     case 'W':
  17.         printf("上\n");
  18.             break;
  19.     case 'a':
  20.     case 'A':
  21.         printf("下\n");
  22.             break;
  23.     case 's':
  24.     case 'S':
  25.         printf("左\n");
  26.             break;
  27.     case 'd':
  28.     case 'D':
  29.         printf("右\n");
  30.             break;
  31.         
  32.         
  33.         
  34.     }
  35. //    判断指令 循环
  36. //    输出指令
  37.     }
  38.         return 0;
  39. }
复制代码

作者: neobug    时间: 2015-7-2 23:20
好像有点懂了 但是又说不出个所以然  纠结
作者: 4B青年    时间: 2015-7-2 23:41
while(1)是个死循环,而且你没有加上结束循环的条件。
当scanf在while函数外时,用户输入完毕,则开始死循环;
当scanf在while函数内时,用户没输入一次,循环一次,完毕后又让用户输入,也是死循环;
跟视频相比,这个代码里少了个结束死循环的条件。
作者: αメ炫    时间: 2015-7-2 23:46
把switch删掉剩下while(1){}这就是一个空循环体的死循环,没有结束条件,循环一定是循环干什么事情,这里是需要循环输入,所以一定要把读取输入放在循环体里才行
作者: 2899028818    时间: 2015-7-3 14:05
没有结束条件
作者: q387844322    时间: 2015-7-3 14:22
需要加个结束循环语句
作者: neobug    时间: 2015-7-3 15:33
4B青年 发表于 2015-7-2 23:41
while(1)是个死循环,而且你没有加上结束循环的条件。
当scanf在while函数外时,用户输入完毕,则开始死循 ...

o  非常感谢
作者: neobug    时间: 2015-7-3 15:35
αメ炫 发表于 2015-7-2 23:46
把switch删掉剩下while(1){}这就是一个空循环体的死循环,没有结束条件,循环一定是循环干什么事情,这里是 ...

了解 了解了
作者: neobug    时间: 2015-7-3 15:36
非常感谢大家 新手 还有很多学习的,,
作者: heyuze    时间: 2015-7-3 15:38
4L说得很清楚。毕竟楼主你要的是一直输入一直循环,所以每执行一次循环就必须伴随着输入。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2