| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:一个猜数程序中的scanf中空格问题
只看楼主 加入收藏
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:8 
一个猜数程序中的scanf中空格问题
这是个猜数问题,猜完一个数后程序会问你是否继续猜下一个
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    int magic;
    int guess;
    int count = 0;
    char reply;
    
    
    srand(time(NULL));
    do
    {
        magic = rand()%100 +1;
        do    
        {
            printf("guess a number: \n");
            scanf("%d",&guess);
            count++;
            if( magic > guess)
            printf("too low \n");
            else if( magic < guess)
            printf("too high \n");
        }
        while((guess != magic) && (count < 10));
            if(count < 10)
                printf("right");
            else
                printf("no chance");

        printf("do you want to contiune(y or n):");
        scanf("%c",&reply);    //问题就在这个scanf这里,答案中写着%c前面有一个空格,然后发现加了空格程序正常
    }while (reply == 'y');             //没加空格后会跳过reply的输入,直接结束程序了
                                           //非常困惑,,想问一下这里的%c前面空格到底有什么作用           
         printf("game over");              
    
    

    return 0;
}
搜索更多相关主题的帖子: guess 
2012-02-25 19:56
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:8 
加空格?加空格也没有吧?其实的确读取了,只不过读取的是最后一个数后的换行符,自然就结束咯

酱油实习生
2012-02-25 20:44
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:0 
回复 2楼 墨清扬
谢谢指教。我反复试了一下了,用vc6.0,没空格的情况下的确是读取了换行符,但是有空格的情况程序就正常了。
还有为什么读取换行符了,我还是不太理解啊。
2012-02-25 21:16
snakelazixp
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2012-2-13
收藏
得分:7 
程序代码:
#include<stdio.h>
void main()
{
    char ch;
    scanf("%c",&ch);
    printf("ch=%c\n",ch);
}
貌似没有楼主说的问题吧,有没有空格都不影响的。
2012-02-25 22:25
snakelazixp
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2012-2-13
收藏
得分:0 
printf("do you want to contiune(y or n):");
你的这句话没有换行,如果你执行下面的scanf()时按了回车,scanf()会把回车当做字符接收赋给reply。。。希望楼主明白。。。
2012-02-25 22:29
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 3楼 tangtangt
加空格就正常,那我就无法理解了……可能跟编译器有关吧?

酱油实习生
2012-02-26 00:18
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:0 
的确是忽略了5楼所说的scanf()会把回车当做字符接收赋给reply,不过貌似和上面那句话没有什么关系。应该2楼说的读取的值时候输入的回车。
试了一下,在一开始的读取猜的数时scanf后面加ch=getchar()把回车清理掉就行了。还有另一种方法就是加那个空格,这题答案那里特别注释了%c前面有空格,
于是去查了下c primer plus,书上说在%c之前加空格则读取遇到的第一个非空白字符。
多谢两位了。
2012-02-26 01:34
杨松松
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:142
注 册:2011-12-3
收藏
得分:0 
请问,我把("do you want to contiune(y or n):")改成("do you want to contiune(y or n):\n");之后为啥直接跳过了输入Y、N阶段?
2012-02-26 22:30
VICTER
Rank: 2
等 级:论坛游民
帖 子:14
专家分:27
注 册:2011-12-27
收藏
得分:0 
注意 scanf 的 使用  最好 在这个地方使用  getchar  或者 读取前清空 缓冲区吧
2012-02-26 22:50
快速回复:一个猜数程序中的scanf中空格问题
数据加载中...
 
   



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

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