Последний номер массива продолжает ошибаться после состояния переключения

#c

#c

Вопрос:

Например, если я введу: "123456-7" . Вывод при первом операторе печати будет: "123456-7" и при 2-м операторе печати это будет "7" . Что правильно.

Но в любой момент после перерыва, если я снова напечатаю массив, оператор печати будет ошибочным в последней цифре. Это будет выглядеть так: "123456-1" и второй будет выглядеть так "1" .

 #include <stdio.h>

int main()
{
    int lotoNumbers[6];
    int ticketNumbers[6];
    char option;

    while(option != 'C')
    {    
        printf("Your option:");
        scanf(" %c", amp;option);

        switch(option)
        {
            case 'W': printf("Please enter todays winning ticket number:");
                      scanf("-", amp;lotoNumbers[0], amp;lotoNumbers[1], amp;lotoNumbers[2], amp;lotoNumbers[3], amp;lotoNumbers[4], amp;lotoNumbers[5], amp;lotoNumbers[6]);

                      printf("Your loto ticket number is: %d%d%d%d%d%d-%dn", lotoNumbers[0], lotoNumbers[1], lotoNumbers[2], lotoNumbers[3], lotoNumbers[4], lotoNumbers[5], lotoNumbers[6]);
                      printf("----The following numbers matched! %dn", lotoNumbers[6]);
                      break;

            case 'T': printf("Please enter your ticket number:");  
                      scanf("-", amp;ticketNumbers[0],amp;ticketNumbers[1],amp;ticketNumbers[2],amp;ticketNumbers[3],amp;ticketNumbers[4],amp;ticketNumbers[5],amp;ticketNumbers[6]);

                      printf("Your loto ticket number is: %d%d%d%d%d%d-%dn", ticketNumbers[0], ticketNumbers[1], ticketNumbers[2], ticketNumbers[3], ticketNumbers[4], ticketNumbers[5], ticketNumbers[6]);
                      break;

            case 'C': printf("Computing....n");
                      break;

            case 'Q': printf("The program will now quit. Thank you for playing LOTO 649.n");
                      return (0);
                      break;

            default: printf("You entered an invalid option. The program will now terminate.n");
                     return (0);
        }
    }

    printf("The numbers are:%d%d%d%d%d%d-%dn", lotoNumbers[0], lotoNumbers[1], lotoNumbers[2], lotoNumbers[3], lotoNumbers[4], lotoNumbers[5], lotoNumbers[6]);
    printf("The number is: %dn", lotoNumbers[6]);

    return 0;
}
  

Комментарии:

1. нам нужен пример кода, который можно скомпилировать. избавьтесь от всего ненужного материала.

2.Хорошая идея проверить результат scanf() перед использованием lotoNumbers . Убедитесь, что это 7.

3. meta.stackexchange.com/questions/94807/…

4. Отмеченное будет сделано в будущем. Извините за это.

5. Это четвертый вопрос, который вы задали, который сводится к неправильному использованию индексов массива. Вы сэкономите много времени, если прочитаете несколько онлайн-руководств по массивам и индексации.

Ответ №1:

Вы не выделили достаточно места для своих массивов. Число, используемое для выделения места для массива, — это количество записей в массиве, а не последний номер индекса. Индекс 6 является 7-м элементом и находится за концом массива. Значение lotoNumbers[6] не определено и может изменяться случайным образом, потому что программа использует эту память для чего-то другого.

 int lotoNumbers[6];
int ticketNumbers[6];
  

Это 6 должно быть 7.