首页 > 解决方案 > 循环的数组输入覆盖值

问题描述

我将包含整个代码以防万一,但未注释的部分是行为不端的部分。出于某种原因,它接受元素 5 之前的输入,但之后它将循环的值设置为用户输入的任何值。元素 0-5 工作得很好,我之前设置了另一个循环,它工作得很好,假设一个永远不会到达元素 5

编辑:我知道我现在做了什么。我再次使用相同的数组而没有调整它的大小。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ARRAY_SIZE 6
#define ARRAY_SIZE2 10

int main(void);
int main(void)
{
    int array [ARRAY_SIZE];
    int array2 [ARRAY_SIZE2];
    int loop;
    int loop2;


   /* for (loop = 0; loop < ARRAY_SIZE; loop++)   //prompt for ARRAY_SIZE number of integers and put them in the array
    {
        printf("\nEnter an integer:");
        scanf("%d", &array[loop]);
    }
    printf("\n\nThe original order:");
    for (loop = 0; loop < ARRAY_SIZE; loop++)   //prints the array out one line at a time
    {
        printf("\n%d", array[loop]);
    }
    printf("\n\nReverse order:");
    for (loop = ARRAY_SIZE - 1 ; loop > -1; loop--)  //prints the array in reverse order
    {
        printf("\n%d", array[loop]);
    }
    printf("\nMy name is Corbin King\n");*/

    for (loop = 0; loop < ARRAY_SIZE2; loop++)
    {
        printf("\nenter an integer:");
        scanf(" %d", &array[loop]);
        printf("%d", loop);
    }
     for (loop = 0; loop < ARRAY_SIZE2; loop++)
    {
        printf("%d\n", array[loop]);

    }
    /*for (loop = 0; loop < ARRAY_SIZE2; loop++)
    {
        for (loop2 = loop + 1; loop2 < ARRAY_SIZE2; loop2++)
        {
            if (array [loop] > array [loop2])
            {
            array2 [loop] = array [loop2];

            }


        }


    }
    for (loop = 0; loop < ARRAY_SIZE2; loop++)
    {
        printf("\n%d", array2 [loop]);
    }*/
    getch(); //The getch command waits until a user presses a key
    return 0;
}

标签: arraysc

解决方案


变量array有一个大小ARRAY_SIZE。您只能循环直到ARRAY_SIZE-1,从 开始0,其中循环控制变量用于索引。通过ARRAY_SIZE2在控制表达式中使用,您实际上是在使用超出范围的索引,并且访问超出范围的内存是未定义的行为

for将循环的控制表达式更改为loop < ARRAY_SIZE


推荐阅读