免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1324 | 回复: 5
打印 上一主题 下一主题

一个运行结果,怎么也想不通。请朋友们指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-10 10:07 |只看该作者 |倒序浏览
因为不知道属于哪类问题,只好这样命名,请斑竹见谅。
代码很简单:

  1. #include <stdio.h>;
  2. #include <ctype.h>;
  3. //------------------------------------------
  4. 01void main()
  5. 02{
  6. 03        char ch;
  7. 04        int i=1;
  8. 05        while(i){
  9. 06
  10. 07                do{
  11. 08                        printf("(E) enter name\n");
  12. 09                        printf("(R) report name\n");
  13. 10                        printf("(Q) quit\n");
  14. 11                        scanf("%c",&ch);
  15. 12                        ch=toupper(ch);
  16. 13                }while(ch!='E' && ch!='R' && ch!='Q');
  17. 14
  18. 15                switch(ch){
  19. 16
  20. 17                     case 'E': printf("enter name!\n");
  21. 18                                                 break;
  22. 19                     case 'R': printf("report name!\n");
  23. 20                                                  break;
  24. 21                     case 'Q': printf("quit\n");i=0;
  25. 22                }
  26. 23        }
  27. 24}

复制代码

但是运行结果很怪

  1. (E) enter name
  2. (R) report name
  3. (Q) quit
  4. e
  5. enter name!
  6. (E) enter name
  7. (R) report name
  8. (Q) quit
  9. (E) enter name
  10. (R) report name
  11. (Q) quit
复制代码

为什么会显示两遍?
我在第11行 "scanf" 的后面加了一个printf("%d======",ch);
结果如下:


  1. (E) enter name
  2. (R) report name
  3. (Q) quit
  4. e
  5. 101====================
  6. enter name!
  7. (E) enter name
  8. (R) report name
  9. (Q) quit
  10. 10====================
  11. (E) enter name
  12. (R) report name
  13. (Q) quit
复制代码

第二次输出前面那个10是怎么回事?我想不通.
这段代码在VC6.0和TC3上结果相同(WIN2K)[/quote]

论坛徽章:
0
2 [报告]
发表于 2004-08-10 10:37 |只看该作者

一个运行结果,怎么也想不通。请朋友们指教

很正常,输入的回车也是一个字符嘛。

论坛徽章:
0
3 [报告]
发表于 2004-08-10 11:50 |只看该作者

一个运行结果,怎么也想不通。请朋友们指教

ASIC码前几个值的含义我忘了。如果如楼上所说的话,这个回车是很可恶的。如果写两个scanf就会陷入死循环。对于这个例子当然是无所谓了,这只是个简化的程序。可有时候他会影响程序的输入的,有什么办法避免这样吗?

论坛徽章:
0
4 [报告]
发表于 2004-08-10 14:51 |只看该作者

一个运行结果,怎么也想不通。请朋友们指教

在scanf()后面加一行:

fflush(stdin);

就OK了!

论坛徽章:
0
5 [报告]
发表于 2004-08-11 03:38 |只看该作者

一个运行结果,怎么也想不通。请朋友们指教

>;>; 在scanf()后面加一行:
>;>; fflush(stdin);
>;>; 就OK了!

上述回答不尽正确。请参照这个帖子的说明:http://bbs.chinaunix.net/forum/v ... t=whyglinux#2335679

论坛徽章:
0
6 [报告]
发表于 2004-08-11 09:19 |只看该作者

一个运行结果,怎么也想不通。请朋友们指教

感谢大家的帮助,问题解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP