Программа на C: преобразование int в массив int[]

#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] where i = 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] ….. думаю, я просто сумасшедший, лол. Спасибо за помощь