关于c语言数据溢出的问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 14:30:51
题目是输入某一时刻的时数分数秒数,并转化成秒数,然后输出。
我编写的程序:
#include"stdio.h"
main()
{
int h,min,s;
long t;
printf("please input a clock(h:min:s):\n");
scanf("%d:%d:%d",&h,&min,&s);
t=h*3600+min*60+s;
printf("the total second is %ld",t);
}

由于我是初学者 请高手指点!
运行时输入 15:30:45后总是得到负的秒数,显然是溢出了。但我定义的t已经是long了。为什么还溢出呢?

我把程序改了一下
main()
{
int h,min,s;
long t;
printf("please input the clock(h min s):\n");
scanf("%d%d%d",&h,&min,&s);
t=h*3600+min*60+s;
printf("%ld\n",h*3600);
printf("%ld\n",h*3600+min*60);
printf("%ld\n",h*3600+min*60+s);
printf("the total second is:%ld\n",t);
}
当我输入15 30 45后
得到 1037040
1038840
1038885
the total second is:-9691:
见鬼了。。貌似是t的值不能被正确赋予。达人们救救我

//你的程序是没有问题的,但是输入的时候应该输入 15:30:45 ,
//而不是15 30 45 ,如果你确实输入的是15:30:45 这种形式,那
//么检查你的输入法,在输入屏幕上一定要是英文,这不是溢出的
//问题,只不过当你没按正常读入值的时候等于没有赋初值,没赋
//值就是一个很大的负数,我郁闷,这个咋还没解决呀,我都运行你的程序了,根本就没问题,VC里面一个整型占4个字节,6位数是不可能溢出的啊

有错吗?我这里没有错

将第一行的定义变量int h,min,s; 改为long h,min,s;
试下,可能是由于在t=h*3600+min*60+s; 计算右边时采用的是整型得出一个负数,又进行强制类型转换为 长整型的了
C语言学了半年了,考完NCRE 就不太熟了
再就是你确定下你输入的冒号是不是采用的都是英文标点

因为你输入的是全角符号,应该输入半角符号

把所有的定义全变为 double 我包准你错不了 呵呵 占内存就占去呗,能对就行 你说是吧

你用c-free试试,我用那个试的没问题