我的C++程序调试时出现“Program received signal SIGSEGV,Segmentation fault.”是什么原因,求指导。

.猫的树
Java领域优质创作者
2016-03-22 12:56:29
这是程序:
#include <iostream.>
using namespace std;
int main()
{
int iYear,iMonth,iDay,iDays;bool bFlag=true;
cout<<"请输入日期(年/月/日):"<<endl;
scanf("%4d/%2d/%2d,&iYear,&iMonth,&iDay");
switch(iMonth)
{
case1:;
case3:;
case5:;
case7:;
case8:;
case10:;
case12:iDays=31;break;
case4:;
case6:;
case9:;
case11:iDays=30;break;
case2: if((iYear % 4 == 0) && (iYear % 100 != 0) || (iYear % 400 == 0)); iDays=29;
iDays=28;break;
default:bFlag=false;
}
if(bFlag)
cout<<"此日期对应月的天数是:"<<iDays<<endl;
else
cout<<"输出错误:"<<endl;
return 0;
}
...全文
1205 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-03-22
  • 打赏
  • 举报
回复
双引号位置错了,scanf("%4d/%2d/%2d,&iYear,&iMonth,&iDay");改为scanf("%4d/%2d/%2d",&iYear,&iMonth,&iDay);
小灸舞 版主 2016-03-22
  • 打赏
  • 举报
回复
有几个问题:
1.scanf处双引号,上面已经说了
2.case和后面的数字要分开
3.if((iYear % 4 == 0) && (iYear % 100 != 0) || (iYear % 400 == 0))后面不应该加分号,而且应该加上else

#include<iostream>
using namespace std;

int main(){
int iYear,iMonth,iDay,iDays;bool bFlag=true;
cout<<"请输入日期(年/月/日):"<<endl;
scanf("%4d/%2d/%2d",&iYear,&iMonth,&iDay);
switch(iMonth)
{
case 1:;
case 3:;
case 5:;
case 7:;
case 8:;
case 10:;
case 12:iDays=31;break;
case 4:;
case 6:;
case 9:;
case 11:iDays=30;break;
case 2: if((iYear % 4 == 0) && (iYear % 100 != 0) || (iYear % 400 == 0)) iDays=29;
else iDays=28;break;
default:bFlag=false;
}
if(bFlag)
cout<<"此日期对应月的天数是:"<<iDays<<endl;
else
cout<<"输出错误:"<<endl;
system("pause");
}

赵4老师 2016-03-22
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
.猫的树 2016-03-22
  • 打赏
  • 举报
回复
改了,还是显得那个

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧