鱼C论坛

 找回密码
 立即注册
查看: 1099|回复: 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试试看
小甲鱼最新课程 -> https://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 确实没有定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

谢谢!我忘记了放后面的函数,要提前定义函数可是·exe闪退还在。。。是编译器的问题吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

下面的程序已经可以运行了,没有闪退现象,但有一告警,原因已经在最后注释中了,你自己可稍修改,也可不予理睬

  1. #include <stdio.h>
  2. const int ll=80;
  3. int main()
  4. {
  5.     int jg(int y);                           // 定义函数jg()
  6.     int md(int m,int j);                 // 定义函数md()
  7.     int y1 = 0,y2,m1 = 0,m2,d1 = 0,d2,s1;
  8.     int i,sum = 0;
  9.     int y3 = y1 + 80,m3 = m1,d3 = d1;
  10.     float perc;
  11.     printf("日期格式是xxxx xx xx\n"
  12.            "请输入生日:");
  13.     scanf("%d %d %d",&y1,&m1,&d1);
  14.     printf("请输入今日:");
  15.     scanf("%d %d %d",&y2,&m2,&d2);

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

  20.     sum = 0;
  21.     for(i = y1 + 1;i < y2;i++)
  22.     {
  23.         if(1 == jg(i))
  24.         {
  25.             sum = sum + 366;
  26.         }
  27.         else if(0 == jg(i))
  28.         {
  29.             sum = sum + 365;
  30.          }
  31.     }

  32.     for(i = m1 + 1;i <= 12;i++)
  33.     {
  34. `         sum = sum + md(i,jg(y1));
  35.     }


  36.     for(i = 1;i < m2;i++)
  37.     {
  38.         sum = sum + md(i,jg(y2));
  39.     }

  40.     for(i = d1;i <= md(m1,jg(y1));i++)
  41.     {
  42.         sum = sum + 1;
  43.     }

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

  49.     s1 = sum;
  50.     sum = 0;
  51.     for(i = y2 + 1;i < y3;i++)
  52.     {
  53.         if(1 == jg(i))
  54.         {
  55.             sum = sum + 366;
  56.         }
  57.         else if(0 == jg(i))
  58.         {
  59.             sum = sum + 365;
  60.         }
  61.     }


  62.     for(i = m1 + 1;i <= 12;i++)
  63.     {
  64.         sum = sum + md(i,jg(y2));
  65.     }


  66.     for(i = 1;i < m2;i++)
  67.     {
  68.         sum = sum + md(i,jg(y3));
  69.     }

  70.     for(i = d2;i <= md(m1,jg(y2));i++)
  71.     {
  72.         sum = sum + 1;
  73.     }

  74.     for(i = 1;i <= d3;i++)
  75.     {
  76.         sum = sum+1;
  77.     }

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



  82. int jg(int y)
  83. {
  84.     int flag = 0;
  85.     if(y % 400 == 0 || y % 4 == 0 && y % 400 != 0)
  86.     {
  87.         flag = 1;

  88.     }
  89.     return flag;
  90. }


  91. int md(int m,int j)
  92. {
  93.     if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
  94.     {
  95.         return 31;
  96.     }
  97.     else if(m == 4 || m == 6 || m == 9 || m == 11)
  98.     {
  99.         return 30;
  100.     }
  101.     else if(m == 2 && j == 1)
  102.     {
  103.         return 29;
  104.     }
  105.     else if(m == 2 && j == 0)
  106.     {
  107.         return 28;
  108.     }

  109. }// 此处有一个告警:不是所有的控件路径都返回值,原因是 m = 2,j != 0 和 1 时,没有返回值
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

对的,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 02:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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