| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1396 人关注过本帖
标题:关于while循环语句的问题
只看楼主 加入收藏
w184303471
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
关于while循环语句的问题
main()
{   char mystr;
    scanf("%c",&mystr);
    while(mystr!='a')
    {
         printf("aaaa\n");
         scanf("%c",&mystr);
    }
    printf("bbbbbb");
    getch();
}
为什么在mystr!=a时,会输出两段aaaa
知道的高手解释一下
搜索更多相关主题的帖子: 语句 
2010-05-26 19:50
xiaomanaruto
Rank: 6Rank: 6
等 级:侠之大者
帖 子:79
专家分:443
注 册:2010-4-1
收藏
得分:2 
这是你是用scanf输入字符时应该注意的地方,当你读入一个字符时,你同时将回车符传递了过去,而回车符是不等于'a'的,加上你又打入的字符,所以会产生两行。
2010-05-26 20:06
Dzhfield
Rank: 2
等 级:论坛游民
帖 子:12
专家分:37
注 册:2010-5-19
收藏
得分:2 

下面根据程序运行步骤,写出原因,并写出解决方法。希望对你有用!
main()
{   char mystr;
    scanf("%c",&mystr);   /*假如输入字符b,并按回车键(注意此时还向键盘缓存区送入了回车字符“\n”)*/
    while(mystr!='a')      /*b!=a,进入循环*/
    {
         printf("aaaa\n");    /*打印出aaaa*/
         scanf("%c",&mystr);
    /*此时这个输入语句并不会让你输入数据,而是直接读取上回你输入数据后按下的回车字符“\n”,即此时变量mystr中的值为回车字符“\n”,然后继续循环,即回车字符\n!=a,所以又打出aaaa,然后,由于键盘缓存区中的数据被读取完了,此时scanf语句才会让你输入数据,并读取你输入的数据。*/

解决方法:在scanf函数前加一个fflush(stdin);语句。
fflush(stdin);语句的作用:强制清除键盘缓存区中的数据。

    }
    printf("bbbbbb");
    getch();
2010-05-28 13:20
ubuntulover
Rank: 4
等 级:业余侠客
帖 子:77
专家分:256
注 册:2010-4-9
收藏
得分:2 
楼上的都是正解
2010-05-28 14:45
caoweidong
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2010-5-27
收藏
得分:2 
经典!
基础提示:在用"%c"格式输入字符时,空格字符和转义字符都作为有效字符输入。
scanf("%c%c%c", &c1, &c2, &c3);
如输入:a b c 。字符'a'赋给c1,字符(空格)' '赋给c2,字符'b'赋给c3。
2010-05-28 17:09
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:2 
长见识了,不过想问一下,类似上面清除键盘缓存区的语句还有哪些啊?怎么强哥的c语言教程里没看到啊,3楼哪里找到的啊?

我很懒,但我讨厌别人说我懒……
2010-05-28 19:36
wu644877373
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:47
专家分:30
注 册:2010-5-11
收藏
得分:2 
恩,,顶3楼

2010-05-28 19:59
Dzhfield
Rank: 2
等 级:论坛游民
帖 子:12
专家分:37
注 册:2010-5-19
收藏
得分:0 

百度上收,都会有的!
OK!  
2010-05-29 06:42
Zale_YT
Rank: 2
等 级:论坛游民
帖 子:22
专家分:15
注 册:2010-5-27
收藏
得分:2 
我单步运行过,你输入一个非‘a’字符时,然后回车才往下运行,但是这个回车符将被第二次的scanf语句接收,付给mystr,然后不等你输入就会和‘a’进行判断,这样就会连续输出量次。

你可以换一种输入字符的方法比如有getche来接受字符(要包含conio.h这个头文件)。这个不用你回车,就会理解向下运行。
2010-05-29 08:40
快速回复:关于while循环语句的问题
数据加载中...
 
   



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

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