鱼C论坛

 找回密码
 立即注册
查看: 907|回复: 6

[已解决]学鸡:为什么codeblocks里正常的程序的exe文件输入后回车直接闪退啊

[复制链接]
发表于 2020-9-6 15:17:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
好不容易整了个 催命计算器 还玩不了。。

代码:(应该没问题?
#include <stdio.h>
const int ll=80;
int main()
{
        int y1,y2,m1,m2,d1,d2;
        int i,j,sum=0;
        printf("日期格式是xxxx xx xx\n"
                        "请输入生日:");
        scanf("%d %d %d",&y1,&m1,&d1);
        printf("请输入今日:");
        scanf("%d %d %d",&y2,&m2,&d2);

        printf("对输入的检查:\n"
                   "%d %d %d\n"
                   "%d %d %d\n"
                   ,y1,m1,d1,y2,m2,d2);//check

        sum=0;
        for(i=y1+1;i<y2;i++)
        {
                if(1==jg(i)){
                        sum=sum+366;
                }
                else if(0==jg(i)){
                        sum=sum+365;
                }
        }


        for(i=m1+1;i<=12;i++)
        {
                sum=sum+md(i,jg(y1));
        }


        for(i=1;i<m2;i++)
        {
                sum=sum+md(i,jg(y2));
        }

        for(i=d1;i<=md(m1,jg(y1));i++)
        {
                sum=sum+1;
        }

        for(i=1;i<=d2;i++)
        {
                sum=sum+1;
        }
        printf("您活了%d天\n",sum);


        int y3=y1+80,m3=m1,d3=d1,s1=sum;
        sum=0;
        for(i=y2+1;i<y3;i++)
        {
                if(1==jg(i)){
                        sum=sum+366;
                }
                else if(0==jg(i)){
                        sum=sum+365;
                }
        }


        for(i=m1+1;i<=12;i++)
        {
                sum=sum+md(i,jg(y2));
        }


        for(i=1;i<m2;i++)
        {
                sum=sum+md(i,jg(y3));
        }

        for(i=d2;i<=md(m1,jg(y2));i++)
        {
                sum=sum+1;
        }

        for(i=1;i<=d3;i++)
        {
                sum=sum+1;
        }
        float perc;
        perc=(float)s1/(float)(sum+s1)*100;
        printf("如果你能活到80岁你还剩下%d天,已经活了%.3f %c",sum,perc,'%');
        return 0;
}



int jg(int y){

        int flag=0;
        if(y%400==0||y%4==0&&y%400!=0)
                {
                        flag=1;

                }
        return flag;
}


int md(int m,int j){
        if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
        {
                return 31;
        }
        else if(m==4||m==6||m==9||m==11)
        {
                return 30;
        }
        else if(m==2&&j==1)
        {
                return 29;
        }
        else if(m==2&&j==0)
        {
                return 28;
        }

}
最佳答案
2020-9-6 18:50:30
你是在exe上直接运行的话,在源代码主函数里return 0;的上一行加个system("pause");
再运行exe试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-6 16:24:33 | 显示全部楼层
以下是你程序的错误信息:

(21) 行: warning C4013: 'jg' undefined; assuming extern returning int                         // jg 未定义,假设外部返回int
(32) 行: warning C4013: 'md' undefined; assuming extern returning int                       // md 未定义,假设外部返回int
(53) 行: error C2143: syntax error : missing ';' before 'type'                                        // 语法错误:“type”之前缺少“;”
(55) 行: error C2065: 'y3' : undeclared identifier                                                          // 使用了 y3,却未明确定义
(82) 行: error C2065: 'd3' : undeclared identifier                                                          // 使用了 d3,却未明确定义
(86) 行: error C2143: syntax error : missing ';' before 'type'                                        // 语法错误:“type”之前缺少“;”
(87) 行: error C2065: 'perc' : undeclared identifier                                                        // 使用了 perc,却未明确定义
(87) 行: error C2065: 's1' : undeclared identifier                                                           // 使用了 s1,却未明确定义
(87) 行: warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data       // 这是个告警,从 double 型转 float 型 可能丢失数据

你的几处定义错误,我试了一下,将其移到程序的最开始,错误就消失了,而 jg、md 确实没有定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-6 16:48:46 | 显示全部楼层
风过无痕1989 发表于 2020-9-6 16:24
以下是你程序的错误信息:

(21) 行: warning C4013: 'jg' undefined; assuming extern returning int    ...

谢谢!我忘记了放后面的函数,要提前定义函数可是·exe闪退还在。。。是编译器的问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-6 18:50:30 | 显示全部楼层    本楼为最佳答案   
你是在exe上直接运行的话,在源代码主函数里return 0;的上一行加个system("pause");
再运行exe试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-6 19:38:54 | 显示全部楼层
greenery 发表于 2020-9-6 16:48
谢谢!我忘记了放后面的函数,要提前定义函数可是·exe闪退还在。。。是编译器的问题吗{:10_24 ...

下面的程序已经可以运行了,没有闪退现象,但有一告警,原因已经在最后注释中了,你自己可稍修改,也可不予理睬
#include <stdio.h>
const int ll=80;
int main()
{
    int jg(int y);                           // 定义函数jg()
    int md(int m,int j);                 // 定义函数md()
    int y1 = 0,y2,m1 = 0,m2,d1 = 0,d2,s1;
    int i,sum = 0;
    int y3 = y1 + 80,m3 = m1,d3 = d1;
    float perc;
    printf("日期格式是xxxx xx xx\n"
           "请输入生日:");
    scanf("%d %d %d",&y1,&m1,&d1);
    printf("请输入今日:");
    scanf("%d %d %d",&y2,&m2,&d2);

    printf("对输入的检查:\n"
           "%d %d %d\n"
           "%d %d %d\n"
           ,y1,m1,d1,y2,m2,d2);

    sum = 0;
    for(i = y1 + 1;i < y2;i++)
    {
        if(1 == jg(i))
        {
            sum = sum + 366;
        }
        else if(0 == jg(i))
        {
            sum = sum + 365;
         }
    }

    for(i = m1 + 1;i <= 12;i++)
    {
 `         sum = sum + md(i,jg(y1));
    }


    for(i = 1;i < m2;i++)
    {
        sum = sum + md(i,jg(y2));
    }

    for(i = d1;i <= md(m1,jg(y1));i++)
    {
        sum = sum + 1;
    }

    for(i = 1;i <= d2;i++)
    {
        sum = sum + 1;
    }
    printf("您活了%d天\n",sum);

    s1 = sum;
    sum = 0;
    for(i = y2 + 1;i < y3;i++)
    {
        if(1 == jg(i))
        {
            sum = sum + 366;
        }
        else if(0 == jg(i))
        {
            sum = sum + 365;
        }
    }


    for(i = m1 + 1;i <= 12;i++)
    {
        sum = sum + md(i,jg(y2));
    }


    for(i = 1;i < m2;i++)
    {
        sum = sum + md(i,jg(y3));
    }

    for(i = d2;i <= md(m1,jg(y2));i++)
    {
        sum = sum + 1;
    }

    for(i = 1;i <= d3;i++)
    {
        sum = sum+1;
    }

    perc = (float)s1 / (float)(sum + s1) * 100;
    printf("如果你能活到80岁你还剩下%d天,已经活了%.3f %c\n",sum,perc,'%');
    return 0;
}



int jg(int y)
{
    int flag = 0;
    if(y % 400 == 0 || y % 4 == 0 && y % 400 != 0)
    {
        flag = 1;

    }
    return flag;
}


int md(int m,int j)
{
    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
    {
        return 31;
    }
    else if(m == 4 || m == 6 || m == 9 || m == 11)
    {
        return 30;
    }
    else if(m == 2 && j == 1)
    {
        return 29;
    }
    else if(m == 2 && j == 0)
    {
        return 28;
    }

}// 此处有一个告警:不是所有的控件路径都返回值,原因是 m = 2,j != 0 和 1 时,没有返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-6 21:13:08 | 显示全部楼层
谢谢各位大大
我懂了,程序执行完以后直接退出,由于exe运行速度很快,所以出现了闪退效果。。
只要最后加syste(pause);或者getchar();
就ok啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-7 08:03:39 | 显示全部楼层
greenery 发表于 2020-9-6 21:13
谢谢各位大大
我懂了,程序执行完以后直接退出,由于exe运行速度很快,所以出现了闪 ...

对的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 06:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表