| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1744 人关注过本帖
标题:新人求助scanf("%d",&a)和scanf("%d ",&a)的区别 ...
只看楼主 加入收藏
sisos
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2012-6-3
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:7 
新人求助scanf("%d",&a)和scanf("%d ",&a)的区别
RT 两者之间的区别是%d后面的一个空格

我是按照《C语言入门经典》里面的要求编写的一个游戏
正确的代码如下


如果我将scanf("%d",&number)的代码变成 scanf("%d ",&number),会出现的问题是要输入两次数字,而且只有第一次的数据会被用于判断是否输入正确
图片附件: 游客没有浏览图片的权限,请 登录注册


求各位高手指导
程序代码:
#include <stdio.h>
#include<stdbool.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
int main(void)
{

    bool correct=true;
    int counter=0;
    char ok='Y';
    time_t now=0;
    time_t seed=0;
    int number=0;
    int cs=0;
    printf("一个测试记忆力的游戏\n");
    printf("你是否愿意参加:");
    scanf("%c",&ok);
if (toupper(ok)=='Y')
{

    do
    {
        correct=true;

        counter=0;
        cs=2;
        while (correct)
        {
        seed=time(NULL);
        now=clock();
        cs +=counter++%3 ==0;
        srand((unsigned int)seed);
        for (int i=1;i<=cs ;i++ )
        {
          printf("%d ",rand()%10);
        }
        for (;clock()-now<CLOCKS_PER_SEC ; );
        printf("\r");
        for (int i=1;i<=cs ;i++ )
        {
           printf("  ");
        }
        printf("\r");
        srand((unsigned int)seed);
        for (int i=1;i<=cs ;i++ )
        {
            scanf("%d",&number);
            if (number !=rand()%10)
            {
                correct=false;
                break;
            }
        }
        printf("%s\n",correct?"":"");
      fflush(stdin);
     printf("你是否再愿意参加:");
     scanf("%c",&ok);
    }
    }while (toupper(ok)=='Y');
    return 0;
}
else
    {
    return 0;
    }
return 0;
}


[ 本帖最后由 sisos 于 2012-6-3 22:05 编辑 ]
搜索更多相关主题的帖子: number C语言 
2012-06-03 22:03
震中地带
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:171
专家分:359
注 册:2012-3-26
收藏
得分:5 
因为在scanf函数中,如果你键入一个空格它会认为你还会输入另一个数,他会等你输入另一个数以后才将你的输入返给主函数,主函数才能调用你的输入给相应的变量赋值,所以你要输入两个数才行,因为你这里只定义了一个说明符%d,所以他只会按你后面的变量表顺序将第一个数送到变量的内存单元中,所以只有第一个数有用。另外,在scanf函数中格式字符串中的空格意味着跳过下一个输入之前的任何空格。
2012-06-03 22:59
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 2楼 震中地带
谢谢了
2012-06-03 23:12
JollyRoger
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2012-5-28
收藏
得分:0 
因为scanf遇到第一个空格会停止读取
2012-06-03 23:15
caroer
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-1
收藏
得分:0 
记住这里不用多加空格就好了~!
2012-06-04 11:58
魅力LY
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2012-6-4
收藏
得分:0 
貌似这个程序有个错误吧????
2012-06-04 21:29
sisos
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2012-6-3
收藏
得分:0 
回复 6楼 魅力LY
错误在哪 请指教
2012-06-05 00:31
郑晓旭1
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2012-6-6
收藏
得分:0 
我也正在刚开始学,有谁能给我建议那就好了
2012-06-06 10:24
快速回复:新人求助scanf("%d",&a)和scanf("%d ",&a)的区别 ...
数据加载中...
 
   



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

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