鱼C论坛

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

[已解决]C语言数组05

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

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

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

x
我的编译器报错了,@FishC

[1]    25813 segmentation fault  ./a.out

  1. #include <stdio.h>

  2. int main(){
  3.         long count = 0;
  4.         int year1, year2;
  5.         int month1, month2;
  6.         int day1, day2;
  7.         int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  8.         while(year1 <= year2){
  9.                 days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0))?29:28;
  10.                 while(month1 <= 12){
  11.                         while(day1 < days[month1 -1]){
  12.                                 if(year1 == year2 && month1 == month2 && day1 == day2){
  13.                                         goto FINISH;
  14.                                 }
  15.                                 day1++;
  16.                                 count++;
  17.                         }
  18.                         day1 = 1;
  19.                         month1++;
  20.                 }
  21.                 month1 = 1;
  22.                 year1++;
  23.         }
  24. FINISH: printf("你总共在这个世上存活了%ld天!", count);

  25.         return 0;
  26. }
复制代码
最佳答案
2024-1-8 19:14:03
看起来你的代码没有完全贴出来,但是让我先来解释一下"segmentation fault"(分段错误)。

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

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

1. 在声明数组`days`时,你没有指定数组大小。这可能导致数组越界访问,从而触发分段错误。你可以在声明时指定数组大小为12,以确保不会越界访问:
  1. int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
复制代码


2. 在`while`循环中的条件判断语句中,你可能没有给`year1`、`year2`等变量赋初值。如果这些变量没有正确初始化,可能会导致分段错误。你可以在声明变量时给它们赋初值:
  1. int year1 = 0, year2 = 0;
  2. int month1 = 0, month2 = 0;
  3. int day1 = 0, day2 = 0;
复制代码


另外,你可能没有在循环中更新`count`的值。你可以在循环内部增加一个条件,当年份相等且月份相等时,停止循环,并输出`count`的值。

最终的代码可能如下所示:
  1. #include <stdio.h>

  2. int main(){
  3.         long count = 0;
  4.         int year1 = 0, year2 = 0;
  5.         int month1 = 0, month2 = 0;
  6.         int day1 = 0, day2 = 0;
  7.         int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  8.         while(year1 != year2 || month1 != month2){
  9.                 count++;
  10.                 day1++;
  11.                 if(day1 > days[month1]){
  12.                         day1 = 1;
  13.                         month1++;
  14.                         if(month1 > 12){
  15.                                 month1 = 1;
  16.                                 year1++;
  17.                         }
  18.                 }
  19.         }

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

  21.         return 0;
  22. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-8 19:14:03 | 显示全部楼层    本楼为最佳答案   
看起来你的代码没有完全贴出来,但是让我先来解释一下"segmentation fault"(分段错误)。

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

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

1. 在声明数组`days`时,你没有指定数组大小。这可能导致数组越界访问,从而触发分段错误。你可以在声明时指定数组大小为12,以确保不会越界访问:
  1. int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
复制代码


2. 在`while`循环中的条件判断语句中,你可能没有给`year1`、`year2`等变量赋初值。如果这些变量没有正确初始化,可能会导致分段错误。你可以在声明变量时给它们赋初值:
  1. int year1 = 0, year2 = 0;
  2. int month1 = 0, month2 = 0;
  3. int day1 = 0, day2 = 0;
复制代码


另外,你可能没有在循环中更新`count`的值。你可以在循环内部增加一个条件,当年份相等且月份相等时,停止循环,并输出`count`的值。

最终的代码可能如下所示:
  1. #include <stdio.h>

  2. int main(){
  3.         long count = 0;
  4.         int year1 = 0, year2 = 0;
  5.         int month1 = 0, month2 = 0;
  6.         int day1 = 0, day2 = 0;
  7.         int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  8.         while(year1 != year2 || month1 != month2){
  9.                 count++;
  10.                 day1++;
  11.                 if(day1 > days[month1]){
  12.                         day1 = 1;
  13.                         month1++;
  14.                         if(month1 > 12){
  15.                                 month1 = 1;
  16.                                 year1++;
  17.                         }
  18.                 }
  19.         }

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

  21.         return 0;
  22. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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