注册 登录
编程论坛 C++教室

新手学C++的一些疑问

峻峰 发布于 2008-12-04 20:12, 1376 次点击
请各位帮我看一下我的代码有什么问题。。
运行之后,结果总是出现不是期待种的结果

//build a program to know how many seconds in a year
//in this program ,you should key in year day hour and minute
#include <iostream>
using namespace std;
int main()
{
    int year,day,hour,minute,second;
    int seconds;
    int stop;//use the key in function to stop the exe
        cout<<"key in the years you want to know\n";
            cin>>year;
         cout<<"key in the days in a year\n";
            cin>>day;
        cout<<"key in the hours in a day\n";
             cin>>hour;
        cout<<"key in the minutes in an hour\n";
            cin>>hour;
        cout<<"key in the seconds in a minute\n";
            cin>>second;
        seconds=year * day * hour * minute *second;
        cout<<"the years you key in is "<<year<<" ,and the seconds number is \n"<<seconds<<endl;
cin >>stop;
}
12 回复
#2
newyj2008-12-04 20:55
不知 lz 有什么期待
#3
debroa7232008-12-04 21:02
seconds=year * day * hour * minute *second; 有可能是外星生物的时间进制!
时间单位的进制都不知道吗?这样的运算能得到秒数?想想一年多少天,一天多少小时,一小时多少分,一分多少秒.
#4
hitcolder2008-12-05 13:07
以下是引用debroa723在2008-12-4 21:02的发言:

seconds=year * day * hour * minute *second; 有可能是外星生物的时间进制!
时间单位的进制都不知道吗?这样的运算能得到秒数?想想一年多少天,一天多少小时,一小时多少分,一分多少秒.


哈哈,楼主好像是只要输入年数,然后自己设定年,天,小时,分,秒的进制啊,不过只是设成个int变量,不怕溢出吗
#5
峻峰2008-12-05 18:11
貌似问题还没解决嘛。。
这个设置,我用来检验一下运算的
没想到一算就出问题了
我自己输入数据的适合,感觉没什么问题
而且我是用计算器算过的。

但是在这里却出现问题了

或不会是数字的二进制数目到达顶峰啊。。。我记得有这样的错误存在。
但是一直都没有解决过
#6
debroa7232008-12-06 10:30
昨天没仔细看,原来是下面代码有问题
cout<<"key in the minutes in an hour\n";
cin>>hour;//这里你要输入分,却把hour放在这儿了,那么变量minute由于没有初始化,是不能参于运算的,它只有声明没有定义的话,是不会在内存中存在的,所以程序员会崩溃
#7
jklr112008-12-06 11:45
呵呵,没错,minute是一个不确定的数值,当然结果不可预测
#8
峻峰2008-12-06 18:50
哎呀,我真是大蒙。。。居然打字的适合打成一样了。。。

其实问题还是有的。

例如,我在程序上编辑一个数的平方。。。当这个数大于100000的适合,会出现乱码。。。但是在99999的适合还是可以。。。也就是说100000的平方,就是乱码了。。不是期待结果。
就像是这样。。。
#include <iostream>
using namespace std;
int sqr(int a);
int main()
{
    int stop;//用来停止,方便观察结果
    int num;
    cin>>num;
    cout<<sqr(num);
    
    cin >>stop;
return 0;
}
int sqr(int a )
{
    return a *a;
}

当输入数字大于100000的时候,就产生错误的东西了。

[[it] 本帖最后由 峻峰 于 2008-12-6 18:58 编辑 [/it]]
#9
hitcolder2008-12-07 12:05
回复 第8楼 峻峰 的帖子
楼主确定输入99999可以吗,我运行了下99999*99999显示是14098654094,MS不太对啊,int型数据在VC++6.0中是占4个字节,32位数据,它的数据范围是:>> 2^32-1

ans =

  4.2950e+009
输入99999肯定不会出来正确结果。(假设的是无符号整数啊,如果有符号,范围会小一半 )
#10
夜罗刹2008-12-08 00:25
在c++中 int类型是4个字节的
    也就是2的32次方  开根号后是2的16次方
  2的16次方是64kB也就是 1024*64=65536 很熟悉的数字
   比它大的数字输入后都有可能出现乱码 所以99999是得不到正确结果的
#11
笛神2008-12-08 00:41
#12
wyp020332008-12-08 18:26
楼主是要计算一年中有多少秒吗?
如果是的话,这个公式很简单啊,一年365天,一天24小时,一小时60分钟,一分钟60秒,相乘就可以了:365*24*60*60。如果象楼主那样,那么我输入year=2008;day=256;hour=15;minutes=56;secend=53;那么你得到的结果seconds=year * day * hour * minute *second;那就是2008*256*15*56*53;肯定就不是题目要求的结果。
#13
terryf502008-12-09 21:47
明白了,原来不同编译器数据类型取值范围不一样的.
1