| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1311 人关注过本帖
标题:关于while(1)的疑问~
只看楼主 加入收藏
木瓜君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:144
注 册:2009-10-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
关于while(1)的疑问~
程序代码:
#include "stdio.h"
void main()
{
    char ch;
    while (1)
    {
        printf("Do you want to continue,press 'Y' or 'N' to chioce\n");
        ch=getchar();
        if (ch=='Y'||ch=='y')
            continue;
        if (ch=='N'||ch=='n')
            break;
    }
}

为什么ch为y时,printf出两行"Do you want to continue,press 'Y' or 'N' to chioce\n"?
不解,望大大回答~
搜索更多相关主题的帖子: 疑问 
2009-11-17 12:24
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:0 
肯定啊,你如果输入y那么不经过continue后面的语句,又重新循环,因为while(1),所以不输入n就永远是一个死循环。

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2009-11-17 12:33
lyitem000
Rank: 2
等 级:论坛游民
帖 子:15
专家分:18
注 册:2009-11-15
收藏
得分:0 
回复 楼主 木瓜君
在continue;后+个break;就只有一行了,不知道对不对
2009-11-17 12:34
万改称才
Rank: 3Rank: 3
来 自:温州
等 级:论坛游侠
帖 子:58
专家分:113
注 册:2009-11-10
收藏
得分:0 
第一行 是在进入 while 循环的时候打印的   
因为你在输入  y的 时候重新运行了while 循环  就 continue   重新进入循环  打印第二行。。。。。

老师说 : 好好读书
2009-11-17 12:38
万改称才
Rank: 3Rank: 3
来 自:温州
等 级:论坛游侠
帖 子:58
专家分:113
注 册:2009-11-10
收藏
得分:0 
程序代码:
#include "stdio.h"
void main()
{
    char ch;
    printf("Do you want to continue,press 'Y' or 'N' to chioce\n");
    while (1)
    {

        ch=getchar();
        if (ch=='Y'||ch=='y')
           printf("Do you want to continue,press 'Y' or 'N' to chioce\n");
        if (ch=='N'||ch=='n')
            break;
    }
}
输出一行 这样

老师说 : 好好读书
2009-11-17 12:40
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:10 
以下是引用木瓜君在2009-11-17 12:24:17的发言:

#include "stdio.h"
void main()
{
    char ch;
    while (1)
    {
        printf("Do you want to continue,press 'Y' or 'N' to chioce\n");
        ch=getchar();
        if (ch=='Y'||ch=='y')
  
        是LZ编的代码不够好所致,LZ本意是想用while(1)构成一个死循环直到按下'N'才退出,但因为对getchar()的调用机制不了解,导致上面的错误。其实LZ输入一个Y然后按下enter(即c语言里的'\n'),while已经循环了两次了,一次是ch == 'y',
第二次是ch == '\n' ,不要忘了换行也是一个字符,循环两次,自然有两个printf("...");
建议LZ去看看这方面的资料····
    解决方法可参考下fflush(stdin);这个函数的用法,或熟练使用getchar();来防止这类似多余字符的干扰。。。。
2009-11-17 13:17
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
顶楼上的···说的很好···
小弟改了一下,比较简洁的代码···
#include "stdio.h"
void main()
{
    char ch;
    while (1)
    {
        printf("Do you want to continue,press 'Y' or 'N' to chioce\n");
       getchar();
        ch=getchar();
        
        if (ch=='N'||ch=='n')
            break;
    }
}
2009-11-17 13:40
mengfp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:141
注 册:2009-8-5
收藏
得分:0 
楼上正解,吃掉多余字符就可以了
2009-11-17 13:44
hepeng_2010c
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-11-17
收藏
得分:0 
回复 3楼 lyitem000
我认为只要把continue换成break就行,可以试试看,纯属个人意见
2009-11-17 19:33
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
回复 6楼 lijm1989
我试过了,估计是楼之敲了两个y,键盘输入是先保存在缓冲区的,当敲回车时就读入缓冲区的字符,所以有时你看到的和你输入的并不一样,如果缓冲区被意外修改
2009-11-17 20:05
快速回复:关于while(1)的疑问~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030494 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved