Ошибка сегментации (ядро сброшено). Не знаете почему? - PullRequest
1 голос
/ 27 сентября 2019

Попытка научиться кодировать на языке C, получая эту ошибку.

Создание программы, которая получает год и выясняет, високосный год или нет, затем печатает результат.

Ошибка, которую я получаю, это ошибка сегментации (ядро сброшено) Действительно плохо знаком с кодированием на C, не уверен, как это исправить, и ошибка не указывает на конкретную строку или что-то еще.Очень ценю некоторые советы, все помогает.Спасибо!

Это мой код:


int isLeap(int date){

    if(date%400 == 0){
        return 1;
    }

    if(date%4 != 0){
        return 0;
    }

    if(date%100 != 0){
        return 0;

    }

}


int year;
 int green = 0;

  while(green == 0){

     printf("Enter a year: " );
  scanf("%d", year);


  if(year < 0){
      green++;
  }

  if(isLeap(year) == 1){
      printf("Year %d is a leap year.", year);
  }
  if(isLeap(year) == 0){
      printf("Year %d is not a leap year", year);
  }
}
return 0;

} ```

1 Ответ

0 голосов
/ 27 сентября 2019

Поскольку вы сказали, что вы новичок в программировании на C, позвольте мне немного подробнее остановиться на комментарии Кристиана Гиббонса выше.Ответ правильный, но он не объясняет почему.Вот комментарий:

scanf("%d", year); -> scanf("%d", &year);

Ошибка Segmentation Fault (core dumped) указывает на неправильное использование указателя.Или, в вашем случае, использование значения без указателя, как если бы это был указатель.Указатель является адресом памяти.Когда вы используете указатель, вы говорите ЦПУ о необходимости извлекать информацию (или помещать информацию) в память по адресу.Если вы даете неправильный адрес, часто случаются плохие вещи.

Функция scanf() требует указателей для переменных, значения которых назначаются при сканировании строки.В вашем случае вы передали year (текущее значение переменной года) вместо &year (адрес переменной года).

Не отчаивайтесь.Сначала указатели трудно понять, но придерживайтесь этого, и вы получите это.Вот некоторые ссылки, где вы можете узнать больше:

Указатели:

Ошибка сегментации:

...