为什么我的for循环无限运行?

时间:2017-03-21 16:07:05

标签: c

输入数组的大小。但是输入整数for循环无限运行。

#include <stdio.h>

int main() {
    int c, array[5], i;

    printf("Enter the size of the array.");
    scanf("%d", &c);

    array[c];

    printf("Enter the integers to fill the array.");

    for (i = 0; i <= c; i++) {
        scanf("%d", &array[i]);
    }

    for (i = 0; i <= c; i++) {
        printf("%d", array[i]);
        //if (array[0] >= array[i]) {
        //    ...
        //}
    }
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您的数组具有固定大小5.行array[c];不会调整大小。这是一个数组访问(可能是一个越界访问),因此整个程序都有未定义的行为。

要定义VLA,必须在调用scanf 1 之后移动数组声明

int c;
printf("Enter the size of the array.");
scanf("%d",&c);

int array[c];

然后,确保您的循环条件正确。在C数组索引中,基于0,意味着我们在区间[0,c-1]上循环而不是[0,c]。

for(int i = 0; i < c; ++i)

作为争论的最后一点,请注意我是如何将所有变量声明移到最初使用之前的。像这样组织你的代码(具有一定的数据和执行位置)有一个澄清你写的东西的倾向。所以我强烈建议你这样做。

  1. 并确保检查 scanf的返回值。如果对库函数的调用失败,则想要定义数组。

答案 1 :(得分:0)

  1. array[c]指的是&#39; c&#39;在array中的位置,并没有做任何富有成效的工作。尝试删除它并检查一次。
  2. 在for循环中,您正在阅读和打印0 to c中的元素,这意味着您使用了c+1元素而不是c元素。成功:for(i=0;i<c;++i)