#c #arrays
#c #массивы
Вопрос:
Итак, я работаю над программой Zeller’s Rule c, пытаясь разбить 4-значный int, который представляет год определенной даты, на 2 разные переменные int, содержащие первые 2 цифры и последние 2 цифры указанного года.
void main()
{
int day, month, year;
.
.
.
printf("Enter a Year: ");
scanf("%i",amp;year);
.
.
.
int data, i;
int split[3];
for(i=3 ; i>=0 ; i--) //Problem is in the loop
{
data = year % 10;
split[i] = data;
year /= 10;
printf("Data%i: %i, should be %in", i, split[i], data);
}
}
Приведенный выше код выводит: (int year = 1234)
Data3: 0, should be 4
Data2: 0, should be 0
Data1: 0, should be 0
Data0: 0, should be 0
Однако, если я изменю цикл, помеченный как проблема выше, как:
int data, i;
int split[3];
for(i=3 ; i>=0 ; i--) //Data is all there, correctly
{ //Problem arises when I try to store to my array
data = year % 10;
year /= 10;
printf("Data%i: should be %in", i, data);
}
выходные данные вышеуказанного кода изменены: (int year = 1234)
Data3: should be 4
Data2: should be 3
Data1: should be 2
Data0: should be 1
Я совершенно не понимаю, почему программа 0 выдает все, как только я пытаюсь поместить имеющиеся ТАМ данные в мой массив. У меня уже несколько часов болит голова, поскольку я, очевидно, понятия не имею, в чем проблема.
Комментарии:
1. Ну, в вашем первом цикле вы получаете доступ к недопустимому индексу. Вы пытаетесь получить доступ к
split[i]
wherei = 3;
, но только[0], [1], [2]
являются вложенными индексами для массива, объявленного какint split[3]
2.
void main
РААААААААААААРРРРРРРРРРРРРРГГГГГГГГГГГГГГХХХХХХХХ3. Да, я буду первым, кто признает, что это была супер глупая ошибка….. У меня создалось впечатление, что int разделен[3]; инициализировал массив из split [0], split[1], split [2] и split[3] ….. думаю, я просто сумасшедший, лол. Спасибо за помощь
4. @pmg, c — самый старый язык программирования, на котором я работал, и все остальное, на чем я пишу, имеет пробелы, извините, если это не законный способ программирования на C старой школы, lol, это работает
5. @Stranger: вот почему это так плохо! Это работает, потому что ваша реализация компилятора пытается быть полезной и нарушает правила. Когда-нибудь вам придется использовать бесполезную реализацию для управления лазерным лучом на космическом корабле, и лазер выстрелит во время демонстрации, убивая всех на борту 🙂
Ответ №1:
У вас есть 3 ячейки в вашем массиве spit ( int split[3]
), но вы присваиваете ему значение 4 раза:
for(i=3 ; i>=0 ; i--)
измените его на int split[4]
.
Комментарии:
1. Это была супер глупая ошибка….. У меня создалось впечатление, что int разделен[3]; инициализировал массив из split [0], split[1], split [2] и split[3] ….. думаю, я просто сумасшедший, лол. Спасибо за помощь