| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 467 人关注过本帖
标题:调不通,求解释
只看楼主 加入收藏
mk200
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
调不通,求解释
编译环境VC6通过,TC2.0出现奇怪问题。
表现在输入较大的数时,比如999999999(9个9)
我觉得不该溢出的。结果却出乎我意料。

// min_sec.c -- converts seconds to minutes and seconds
#include <stdio.h>
#include <limits.h>
#define SEC_PER_MIN 60   
#define SEC_PER_HOUR 3600
int main(void)
{
    int min, leftsec,hour;
    long sec;
    printf("%d,%ld\n",INT_MAX,LONG_MAX);
    printf("Convert seconds to minutes and seconds!\n");
    printf("Enter the number of seconds (<=0 to quit):\n");
    scanf("%d", &sec);         
    while (sec > 0)
    {
        hour = sec / SEC_PER_HOUR;  
        printf("hour=%d\n",hour);
        leftsec = sec % SEC_PER_HOUR;
        printf("leftsec=%d\n",leftsec);
        min = leftsec/SEC_PER_MIN;
        printf("min=%d\n",min);
        leftsec=leftsec%SEC_PER_MIN;
        printf("leftsec=%d\n",leftsec);
        printf("%ld seconds is %d hour,%d minutes, %d seconds.\n", sec,
                hour,min, leftsec);
        printf("Enter next value (<=0 to quit):\n");
        scanf("%d", &sec);           
    }
    printf("Done!\n");
 
    return 0;
}

搜索更多相关主题的帖子: converts include minutes seconds 
2011-04-20 22:33
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:4 
也许编译器对long的定义不同, 用long long试一试。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-20 22:40
mk200
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-18
收藏
得分:0 
LONG LONG C99里才有,VC6 TC都没的,而且。我程序开始就打印出了INT_MAX,LONG_MAX。人脑运算时发现没溢出,TC咋就溢出了。我感觉是类型转换的问题。谁能详细解释一下
2011-04-20 22:55
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:4 
不只是类型转换的关系。
TC的 int 貌似只有 16 位。
而且还跟 ntvdm 的内存安排方式有关,如果把这个程序放在 dos 下运行结果大概又会不一样。
刚才随便试了一下,发现情况很乱,就懒得深入了。楼主也没必要深究,毕竟这种问题跟编译器、操作系统都有关系,而且 tc 也够老的了,没必要给自己找不自在,干点费力不讨好的事
2011-04-21 00:44
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:4 
把变量都定义成long试试

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-04-21 00:52
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:4 
第一个函数声明出问题了。你自己限定9位最大了。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 08:47
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
printf("%d,%ld\n",INT_MAX,LONG_MAX)这句错了吧,我是用VC++2008的,没有溢出。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 08:49
mk200
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-18
收藏
得分:0 
以下是引用xjzxylj在2011-4-21 08:49:57的发言:

printf("%d,%ld\n",INT_MAX,LONG_MAX)这句错了吧,我是用VC++2008的,没有溢出。
那句是我出错后加上的调试信息,就是看看INT,和LONG所表达的最大值。9个9是不大于LONG_MAX的
2011-04-21 11:46
快速回复:调不通,求解释
数据加载中...
 
   



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

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