小秋! 2023-03-18 08:28 采纳率: 50%
浏览 22
已结题

拼题a出现运行时错误怎么办


#include<iostream>
#include<cstdio>
using namespace std;
class Date{
public:
    int two=28;
    int y,month,day;
    Date(int a,int b,int c){
       y=a;month=b;day=c;
        if(y%100!=0&&y%4==0||y%400==0){
            two=29;}}



};
int main(){
    int a,b,c,i,j;
    int f[20];
    for(i=0;;i++){
    cin>>a>>b>>c;
    if(a==0){j=i;break;}
    Date:Date u(a,b,c);

 if(u.month==1){
    f[i]=u.day;
}
else if(u.month==2){
    f[i]=31+u.day;
}
else if(u.month==3){
    f[i]=31+u.two+u.day;
}
else if(u.month==4){
    f[i]=62+u.two+u.day;
}
else if(u.month==5){
    f[i]=92+u.two+u.day;
}
else if(u.month==6){
    f[i]=123+u.two+u.day;
}
else if(u.month==7){
    f[i]=153+u.two+u.day;
}
else if(u.month==8){
    f[i]=184+u.two+u.day;
}
else if(u.month==9){
    f[i]=215+u.two+u.day;
}
else if(u.month==10){
    f[i]=245+u.two+u.day;
}
else if(u.month==11){
    f[i]=276+u.two+u.day;
}
else{
    f[i]=306+u.two+u.day;
}

    }
    for(i=0;i<j;i++){
    cout<<f[i]<<endl;
    }
    return 0;
}

拼题a显示运行时出错,求帮忙看看哪里出现错误怎么改正

  • 写回答

2条回答 默认 最新

  • 追cium 2023-03-18 08:43
    关注

    参考GPT和自己的思路:

    根据您提供的代码,可能存在多个潜在的运行时错误,例如:

    1. 在类的构造函数中,可能会出现“除以零”的情况,导致程序崩溃。例如,当输入年份为0时,会出现此类错误。应该在程序中加入判断语句,避免分母为0的情况出现。

    2. 在for循环中,可能会出现数组越界的情况,导致程序崩溃。例如,当输入a为0时,数组f的下标可能超出了其范围。应该在程序中加入判断语句,避免数组越界的情况出现。

    3. 在程序中可能会存在一些逻辑错误,导致程序输出的结果与预期不符。例如,在计算f数组的元素值时,应该考虑润年和平年的情况。当前的逻辑中,每次都会执行“Date u(a,b,c);”语句,重新创建对象,导致并不准确。

    为了修复这些问题,您可以尝试进行如下修改:

    1. 在类的构造函数中添加判断语句,如下所示:
    Date(int a, int b, int c) {
        y = a;
        month = b;
        day = c;
        if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
            two = 29;
        }
        else {
            two = 28;
        }
    }
    

    这样,即使输入的年份为0,程序也能正常运行。

    1. 在for循环中添加判断语句,如下所示:
    for (i = 0;; i++) {
        cin >> a >> b >> c;
        if (a == 0 || i >= 20) { // 避免数组越界,限制数组长度为20
            j = i;
            break;
        }
        Date u(a, b, c);
        // 其他的代码不变
    }
    

    这样,在输入a为0或者i大于等于20的时候,程序也能正常结束。

    1. 修改计算f数组元素值的逻辑,避免重复创建对象,如下所示:
    Date u(0, 0, 0); // 在循环外创建对象
    for (i = 0; i < j; i++) {
        cin >> a >> b >> c;
        if (a == 0) {
            break;
        }
        u.y = a;
        u.month = b;
        u.day = c;
        if (u.month == 1) {
            f[i] = u.day;
        }
        // 其他的代码不变
    }
    

    这样,就能避免在每次循环中都创建一个新的对象,保证了计算f数组元素值的正确性。

    希望我的回答能够帮助您解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c