A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© neobug 中级黑马   /  2015-7-2 23:02  /  1056 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


下面代码  输入   随便一个  wsad  会一直循环
  需要把 第8 行 放到  while 里面  才正常
  请问这是为什么啊?

10 个回复

倒序浏览

  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. }
复制代码
回复 使用道具 举报
好像有点懂了 但是又说不出个所以然  纠结
回复 使用道具 举报
while(1)是个死循环,而且你没有加上结束循环的条件。
当scanf在while函数外时,用户输入完毕,则开始死循环;
当scanf在while函数内时,用户没输入一次,循环一次,完毕后又让用户输入,也是死循环;
跟视频相比,这个代码里少了个结束死循环的条件。
回复 使用道具 举报
把switch删掉剩下while(1){}这就是一个空循环体的死循环,没有结束条件,循环一定是循环干什么事情,这里是需要循环输入,所以一定要把读取输入放在循环体里才行
回复 使用道具 举报
没有结束条件
回复 使用道具 举报
需要加个结束循环语句
回复 使用道具 举报
4B青年 发表于 2015-7-2 23:41
while(1)是个死循环,而且你没有加上结束循环的条件。
当scanf在while函数外时,用户输入完毕,则开始死循 ...

o  非常感谢
回复 使用道具 举报
αメ炫 发表于 2015-7-2 23:46
把switch删掉剩下while(1){}这就是一个空循环体的死循环,没有结束条件,循环一定是循环干什么事情,这里是 ...

了解 了解了
回复 使用道具 举报
非常感谢大家 新手 还有很多学习的,,
回复 使用道具 举报
4L说得很清楚。毕竟楼主你要的是一直输入一直循环,所以每执行一次循环就必须伴随着输入。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马