鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 1

[已解决]C语言数组05

[复制链接]
发表于 2024-1-8 19:13:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2024-1-8 19:14:03
看起来你的代码没有完全贴出来,但是让我先来解释一下"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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-8 19:14:03 | 显示全部楼层    本楼为最佳答案   
看起来你的代码没有完全贴出来,但是让我先来解释一下"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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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