| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 638 人关注过本帖
标题:今天复习c语言,发现几个问题,高手进来解决下,谢谢
收藏  订阅  推荐  打印 
冯一超
Rank: 1
等级:新手上路
帖子:12
积分:226
注册:2008-5-24
今天复习c语言,发现几个问题,高手进来解决下,谢谢

/*格式化输入函数scanf()的使用方法
测试程序
                               */
#include <stdio.h>
int main()
{
    int a;
    int b;
    do{
    scanf("%d %d",&a,&b);
    printf("a=%d",a);
    putchar('\n');
    printf("b=%d",b);
    putchar('\n');
    }while (1);
    return 0;
}
①当输入a,b时,为什么是死循环,当第二次执行scanf()函数时为什么不能停下来等待输入?
②当输入为 1.23   1 时,又出现了死循环,难道遇到小数不是截取整数部分正常读取吗?
③我把scanf()改成scanf("%d -%d",&a,&b);即在两个整数之间加一个匹配字符,当我输入
123 321时(注意,我并没有在数据中间加上)匹配字符,输出的结果是
a=123
b=-858993460
a=123
b=-858993460
为什么??


高手帮下忙
搜索更多相关主题的帖子: c语言  scanf  int  c语言  scanf  int  
2008-7-15 13:47
独孤小梦
Rank: 3Rank: 3
等级:中级会员
帖子:255
积分:2958
注册:2008-6-5

你的while这里用错了吧!
最好先定义一个数,然后循环几次……这样应该不会出现死循环!
还要注意scanf里的缓冲区!

编程小菜
2008-7-15 13:56
心若止水
Rank: 2
等级:注册会员
帖子:81
积分:1016
注册:2008-4-9

你把while(1)先去掉,不要完全照书抄。
2008-7-15 13:57
独孤小梦
Rank: 3Rank: 3
等级:中级会员
帖子:255
积分:2958
注册:2008-6-5

VC中可以使用fflush函数输入清空流:
int i;
char s;
scanf(“%s”, &s);   
fflush(stdin);      // 舍弃原先多余的字符

编程小菜
2008-7-15 13:58
冯一超
Rank: 1
等级:新手上路
帖子:12
积分:226
注册:2008-5-24

这是我自己写的测试scanf()的使用方法的程序,用while是为了方便测试的,没想到发现了新的问题
2008-7-15 14:01
爱喝牛奶的猫咪
Rank: 2
来自:QQ群46520219
等级:ID已被封
帖子:514
积分:5824
注册:2008-6-16

还没考试吗?



[color=white]<>

[ 本帖最后由 爱喝牛奶的猫咪 于 2008-7-15 14:45 编辑 ]
2008-7-15 14:44
冯一超
Rank: 1
等级:新手上路
帖子:12
积分:226
注册:2008-5-24

考过了,自己复习啊
2008-7-15 16:18
zhong0711101
Rank: 2
等级:注册会员
帖子:88
积分:940
注册:2008-7-15

最好不要使用这样循环,不要抄书
2008-7-15 20:22
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

int test;

do{
    test = scanf("%d %d",&a,&b);
    while(getchar() != '\n')
        continue;
    if(temp == 2)
    {
        printf("a=%d\n", a);
        printf("b=%d\n", b););
    }
    else
        printf("您输入错误!\n")
}while(test != 2);

============================================

int test;

do{
    test = scanf("%d %d",&a,&b);
    while(getchar() != '\n')
        continue;
}while( (test == 2) ? printf("a=%d\n", a), printf("b=%d\n", b), 0 : printf("您输入错误!\n") );



[ 本帖最后由 cosdos 于 2008-7-15 22:31 编辑 ]

[ 本帖最后由 cosdos 于 2008-7-15 22:34 编辑 ]

[ 本帖最后由 cosdos 于 2008-7-15 22:35 编辑 ]

—>〉Sun〈<—
2008-7-15 22:29
meayer
Rank: 1
等级:新手上路
帖子:6
积分:160
注册:2008-9-13

当你输入a,b时,由于格式为"%d %d",输入不符合格式,因此scanf终止跳出,返回EOF,此时缓冲区仍指向你输入的"a,b",当进行下次循环时,仍出现这样的情况,于是进入死循环;
当输入1.23 1时,函数按照"%d"的格式将1放入变量a中,接下来读b时遇到小数点"."不符合格式,于是如上出现了进入死循环的情况;
当你把格式改成"%d -%d"时,正确输入a后,由于格式中出现'-',与缓冲区格式不匹配,scanf终止跳出,返回EOF,由于此时a值已经读入,而b未做处理,所以a值显示的是123而b值显示的是未做初始化处理时的初值.
2008-9-13 01:39
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.092001 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved