liyifeng295641 发表于 2024-1-8 19:13:05

C语言数组05

我的编译器报错了,@FishC

    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 = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0))?29:28;
                while(month1 <= 12){
                        while(day1 < days){
                                if(year1 == year2 && month1 == month2 && day1 == day2){
                                        goto FINISH;
                                }
                                day1++;
                                count++;
                        }
                        day1 = 1;
                        month1++;
                }
                month1 = 1;
                year1++;
        }
FINISH: printf("你总共在这个世上存活了%ld天!", count);

        return 0;
}

FishC 发表于 2024-1-8 19:14:03

看起来你的代码没有完全贴出来,但是让我先来解释一下"segmentation fault"(分段错误)。

当你运行一个程序时,操作系统会为该程序分配一块内存区域。这块内存被分成了不同的段,如代码段、数据段和堆栈段等。当程序访问了不属于自己的内存区域,或者试图在已释放的内存上进行操作时,就会引发分段错误。

在你的代码中,有几个地方可能会导致分段错误的问题:

1. 在声明数组`days`时,你没有指定数组大小。这可能导致数组越界访问,从而触发分段错误。你可以在声明时指定数组大小为12,以确保不会越界访问:
int days = {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 = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        while(year1 != year2 || month1 != month2){
                count++;
                day1++;
                if(day1 > days){
                        day1 = 1;
                        month1++;
                        if(month1 > 12){
                                month1 = 1;
                                year1++;
                        }
                }
        }

        printf("count = %ld\n", count);

        return 0;
}

希望这可以解决你遇到的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言数组05