|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我的编译器报错了,@FishC
[1] 25813 segmentation fault ./a.out
- #include <stdio.h>
- int main(){
- long count = 0;
- int year1, year2;
- int month1, month2;
- int day1, day2;
- int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
- while(year1 <= year2){
- days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0))?29:28;
- while(month1 <= 12){
- while(day1 < days[month1 -1]){
- if(year1 == year2 && month1 == month2 && day1 == day2){
- goto FINISH;
- }
- day1++;
- count++;
- }
- day1 = 1;
- month1++;
- }
- month1 = 1;
- year1++;
- }
- FINISH: printf("你总共在这个世上存活了%ld天!", count);
- return 0;
- }
复制代码
看起来你的代码没有完全贴出来,但是让我先来解释一下"segmentation fault"(分段错误)。
当你运行一个程序时,操作系统会为该程序分配一块内存区域。这块内存被分成了不同的段,如代码段、数据段和堆栈段等。当程序访问了不属于自己的内存区域,或者试图在已释放的内存上进行操作时,就会引发分段错误。
在你的代码中,有几个地方可能会导致分段错误的问题:
1. 在声明数组`days`时,你没有指定数组大小。这可能导致数组越界访问,从而触发分段错误。你可以在声明时指定数组大小为12,以确保不会越界访问:
- int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
复制代码
2. 在`while`循环中的条件判断语句中,你可能没有给`year1`、`year2`等变量赋初值。如果这些变量没有正确初始化,可能会导致分段错误。你可以在声明变量时给它们赋初值:
- int year1 = 0, year2 = 0;
- int month1 = 0, month2 = 0;
- int day1 = 0, day2 = 0;
复制代码
另外,你可能没有在循环中更新`count`的值。你可以在循环内部增加一个条件,当年份相等且月份相等时,停止循环,并输出`count`的值。
最终的代码可能如下所示:
- #include <stdio.h>
- int main(){
- long count = 0;
- int year1 = 0, year2 = 0;
- int month1 = 0, month2 = 0;
- int day1 = 0, day2 = 0;
- int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- while(year1 != year2 || month1 != month2){
- count++;
- day1++;
- if(day1 > days[month1]){
- day1 = 1;
- month1++;
- if(month1 > 12){
- month1 = 1;
- year1++;
- }
- }
- }
- printf("count = %ld\n", count);
- return 0;
- }
复制代码
希望这可以解决你遇到的问题!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|