学鸡:为什么codeblocks里正常的程序的exe文件输入后回车直接闪退啊
{:10_243:} {:10_243:} 好不容易整了个 催命计算器 还玩不了。。代码:(应该没问题?{:10_285:} )
#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;
}
}
以下是你程序的错误信息:
(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 确实没有定义 风过无痕1989 发表于 2020-9-6 16:24
以下是你程序的错误信息:
(21) 行: warning C4013: 'jg' undefined; assuming extern returning int ...
谢谢!我忘记了放后面的函数,要提前定义函数{:10_254:}可是·exe闪退还在。。。是编译器的问题吗{:10_243:} 你是在exe上直接运行的话,在源代码主函数里return 0;的上一行加个system("pause");
再运行exe试试看
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 时,没有返回值
谢谢各位大大{:10_254:}
{:10_256:}我懂了,程序执行完以后直接退出,由于exe运行速度很快,所以出现了闪退效果。。
只要最后加syste(pause);或者getchar();
就ok啦{:10_279:}{:10_279:} greenery 发表于 2020-9-6 21:13
谢谢各位大大
我懂了,程序执行完以后直接退出,由于exe运行速度很快,所以出现了闪 ...
对的,
页:
[1]