回 帖 发 新 帖 刷新版面

主题:这个简单的程序错在哪里

先上写的代码,如下:

/*
文件描述:--  判断奇数与偶数 

程序功能:--  刻意的使用switch 

创建人员:-- 凌晨一点 , 2011年1月16日 

广而告之:-- 为保证代码缩进一致,请修改编泽器Tab键的空格数为4 

版本号:0.1

修改次数:0 

备注: 有个致命的BUG,开始输入0便可出现 
*/

#include <stdio.h>

int main(void)
{
    short count, even, odd, even_sum, odd_sum, average;
    even_sum = 0;
    odd_sum = 0;
    even = 0;
    odd = 0;
    
    for(scanf("%d",&count); count; scanf("%d",&count))
    {
        switch(count % 2)
        {
            case 0:                 /* 能整除则为偶数 */
                even++;             /*偶数个数依次递增*/
                even_sum += count;  /*所有的偶数相加  */         
            break;
            
            default :               /* 不能被整除则是奇数 */
                odd++;              /* 奇数个数依次递增   */
                odd_sum += count;   /* 所有的奇数相加     */
                break;
        }        
    }
    printf("有%d个偶数,平均值为%d.\n", even, even_sum / even);
    printf("有%d个奇数,平均值为%d.\n", odd, odd_sum / odd);
    printf("bye.\n");
    
    getch();
    
    return 0;
}

这是书中题目需要switch,不然我才不用它,if else多好。可是做完之后,我调了几遍,还是发现了BUG,还是致命的。我使用的是dev-c++编译器。

如果我直接输入数字0,或者在键入的的值中只有偶数或只有奇数而没有另外类型的数,就提示“应用程序发生异常”我却看不出有什么毛病,个人感觉变量的值都对呀。

如果键入的数值既有奇数又有偶数,最后以0结束输入,程序输出结果,这个程序看起来倒像是正常的,还好我多调了几次。

从个人的角度看,实在看不出哪里有问题,导致程序崩溃。求指点,问题出在哪里,感激不尽。

回复列表 (共3个回复)

沙发

这么说吧,lz用for时有没有想过for(;count;)判断为什么用了count……若你注意到了count,你就会注意for的退出和count 的关系,count=0时退出,而你首先就输入count=0;因此直接退出了,导致的很严重的问题就是:n/0的情况!!!其实这么用for,不光你首次输入count=0会出现这种情况,只要是存在n/0的情况都不能输入0^所以lz注意下吧、、
以上个人意见,看的不够详细,能帮助到你最好了……

板凳

在PC机上,整数除法的除数为零,是一个严重的错误。这个是硬件设计造成的,软件应该设法避免除数为零。(其它计算机中,除数为零有可能并非严重错误,但无论如何,最好还是避免。)
若一开始就输入零,则for循环内部代码都没有执行,输出时计算even_sum / even,因为even为零,所以出错。

3 楼


感谢二位,明白了。~

我来回复

您尚未登录,请登录后再回复。点此登录或注册