标题:今天复习c语言,发现几个问题,高手进来解决下,谢谢
只看楼主
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
 问题点数:0 回复次数:10 
今天复习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-07-15 13:47
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
得分:0 
你的while这里用错了吧!
最好先定义一个数,然后循环几次……这样应该不会出现死循环!
还要注意scanf里的缓冲区!

编程小菜
2008-07-15 13:56
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
得分:0 
你把while(1)先去掉,不要完全照书抄。
2008-07-15 13:57
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
得分:0 
VC中可以使用fflush函数输入清空流:
int i;
char s;
scanf(“%s”, &s);   
fflush(stdin);      // 舍弃原先多余的字符

编程小菜
2008-07-15 13:58
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
得分:0 
这是我自己写的测试scanf()的使用方法的程序,用while是为了方便测试的,没想到发现了新的问题
2008-07-15 14:01
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
得分:0 
还没考试吗?



[color=white]<>

[[it] 本帖最后由 爱喝牛奶的猫咪 于 2008-7-15 14:45 编辑 [/it]]
2008-07-15 14:44
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
得分:0 
考过了,自己复习啊
2008-07-15 16:18
zhong0711101
Rank: 2
等 级:论坛游民
帖 子:156
专家分:25
注 册:2008-7-15
得分:0 
最好不要使用这样循环,不要抄书
2008-07-15 20:22
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
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") );



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

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

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

—>〉Sun〈<—
2008-07-15 22:29
meayer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-13
得分:0 
当你输入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-09-13 01:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-223951-1-1.html




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

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