В вашем коде есть две основные проблемы, по одной в каждом for
l oop.
Во-первых, вы должны помнить, что в C
индексы массивов запускаются с от 0 до n - 1
(где n
- размер массива). Итак, код:
for (int i = 1; i <= NUMS; i++) {
//...
должен быть заменен следующим:
for (int i = 0; i < NUMS; i++) { // Note that NUMS = 3 and high_temp[3] is out-of-bounds
//...
Второй для l oop имеет другую ошибку. Здесь вы правильно работаете с нуля до значения n - 1
, но вы неправильно рассчитываете n
. Таким образом, вместо sizeof(high_temp)
(который даст вам общий размер целочисленного массива) вам нужно разделить это значение на размер одного элемента (условно, используйте первый ). Итак, используйте это вместо:
for (size_t i = 0; i < sizeof(high_temp)/sizeof(high_temp[0]); i++){
//...
(я изменил тип с int
на size_t
, так как это то, что возвращает оператор sizeof
; обычно это unsigned int
или unsigned long
или что-то подобное.)
РЕДАКТИРОВАТЬ: В первом l oop, с предложенными мною модификациями, вы можете «восстановить» правильное число в печатных вопросах, просто добавив 1
до значения i
, которое печатается. Итак, вот так:
printf("Enter the high value for day %d: ", i + 1);
EDIT2: Существует также проблема, связанная со значениями, которые вы назначаете в первом l oop. Вы делаете это:
}else{
high_temp[i] = i;
low_temp[i] = i;
}
, но значения, которые вы действительно хотите присвоить, были прочитаны в переменные high
и low
несколькими строками ранее. Итак, используйте это вместо:
} else {
high_temp[i] = high;
low_temp[i] = low;
}