| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:为什么会发生这种情况!!!
只看楼主 加入收藏
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
结帖率:88.24%
收藏
已结贴  问题点数:20 回复次数:5 
为什么会发生这种情况!!!
#include <stdio.h>


int main(void)
{
    int result, c, d;
    int select;
   
    printf("---整数计算器2.0---\n\n");
    printf("(1)进入加法运算\n\n(2)进入减法运算\n\n(3)进入乘法计算\n\n(4)进入除法计算\n\n");
    printf("(5)使用说明\n\n");
    printf("请选择\t");
    scanf("%d", &select);
    while(select != 0)
    {
        if(select == 1)
        {
            printf("\n---加法运算---\n\n");
            printf("请输入第一位数\t");
            scanf("%d", &c);
            printf("\n");
   
            printf("请输入第二位数\t");
            scanf("%d", &d);
            printf("\n");
   
            result = c + d;
            if(result == 1314520)
                printf("hello\n\n");
            else
                printf("计算结果\t\t%d\n\n", result);
        }
        else if(select == 2)
        {
            printf("---减法运算--\n\n");
            printf("请输入第一位数\t");
            scanf("%d", &c);
            printf("\n");
   
            printf("请输入第二位数\t");
            scanf("%d", &d);
            printf("\n");
   
            result = c - d;
            if(result == 1314520)
                printf("hello\n\n");
            else
                printf("计算结果\t\t%d\n\n", result);
        }
        else if(select == 3)
        {
            printf("---乘法计算--\n\n");
            printf("请输入第一位数\t");
            scanf("%d", &c);
            printf("\n");
   
            printf("请输入第二位数\t");
            scanf("%d", &d);
            printf("\n");
   
            result = c * d;
            if(result == 1314520)
                printf("hello\n\n");
            else
                printf("计算结果\t\t%d\n\n", result);
        }
        else if(select == 4)
        {
            printf("---除法计算--\n\n");
            printf("请输入第一位数\t");
            scanf("%d", &c);
            printf("\n");
   
            printf("请输入第二位数\t");
            scanf("%d", &d);
            printf("\n");
   
            result = c / d;
            if(result == 1314520)
                printf("hello\n\n");
            else
                printf("计算结果\t\t%d\n\n", result);
        }
        else if(select == 5)
        {
            printf("\n按0退出,按回车确定,增加while循环,增加说明。\n\n");
        }
        else
            printf("\n请正确选择\n\n");
        printf("(1)进入加法运算\n\n(2)进入减法运算\n\n(3)进入乘法计算\n\n(4)进入除法计算\n\n");
        printf("(5)使用说明\n\n");
        printf("请选择\t");
        scanf("%d", &select);
    }
    getchar();
    getchar();
    return 0;
}


程序运行后,我随便选好后,在  请填写第一位数字这里,我写100+100在回车,他也相应的出现答案,这符号我在程序里没写过啊,计算机怎么自己能计算出?而且会识别符号呢?
2010-02-09 19:48
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
自己顶
2010-02-09 20:29
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
很明显,scanf读取第一个数为100,第二个为+100;这里+不是加号
2010-02-09 20:57
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
不对,我在  请输入第一位数的时候,我输入100+100,然后回车

请输入第二个数的时候,没有数字直接回车,结果就等于200?

我发现,选择1的时候,可以做加减法,选择减法的时候,计算结果就不对了,如果选择乘法除法这样输入的话,会出现死循环。

我就是搞不懂这一情况,特别是选择1的时候,也就是选择加法的时候。
2010-02-09 21:31
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
你若是只输入一个数,则缓冲区的第一个数被第一个scanf读取掉后只剩一个回车符了。第二个scanf会舍弃回车符,但它没有发现可以读取的数,于是它迫使程序等待输入。而当一次你输入两个数时,每个scanf各的所需,程序就不必停了。
2010-02-09 22:00
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:20 
你在输入数的时候不要输入+—*/号很正常的运行啊。减号不对么。是不是你输入100-100结果是200?因为100-(-100) = 200啊。乘除之所以出现死循环是因为第二个scanf遇到*读取失败,把它放回输入队列。再次读取又失败,再放回……如此恶性循环了
2010-02-09 22:05
快速回复:为什么会发生这种情况!!!
数据加载中...
 
   



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

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