切换语句后,最后一个数组编号出错

时间:2014-06-16 16:46:46

标签: c

例如,如果我输入:"123456-7"。第一个print语句的输出为:"123456-7",第二个print语句的输出为"7"。这是正确的。

但是在休息后的任何时候如果再次打印数组,print语句会在最后一位数字出错。它看起来像是:"123456-1",第二个看起来像"1"

#include <stdio.h>

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

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

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

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

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

                      printf("Your loto ticket number is: %d%d%d%d%d%d-%d\n", 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-%d\n", lotoNumbers[0], lotoNumbers[1], lotoNumbers[2], lotoNumbers[3], lotoNumbers[4], lotoNumbers[5], lotoNumbers[6]);
    printf("The number is: %d\n", lotoNumbers[6]);

    return 0;
}

1 个答案:

答案 0 :(得分:4)

您没有为阵列分配足够的空间。用于为数组分配空间的数字是数组中的条目数,而不是最后一个索引号。索引6是第7项,并且超过了数组的结尾。 lotoNumbers [6]的值是未定义的,可以随机更改,因为程序正在将该内存用于其他内容。

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

那6应该是7。