使用循环打印数组会产生垃圾值,但单独打印会给出正确的值

时间:2019-03-17 10:37:12

标签: c arrays

两个月前我才开始使用C编程,并且从读书中自学成才。因此,如果有任何不良习惯或我可以做的事情来改善C语言中的编码,如果你们能反馈给我,我将不胜感激。

我目前正在学习如何为数组编写标准输入和输出。以下是我编写的程序,用于接受用户的数组输入,然后使用循环将其打印出来以测试我的输入是否成功。我还分别在中间打印了前三个元素,以测试我的输入是否成功。

#include <stdio.h>

int main()
{
    long length;
    long i;
    long N;
    long arr[length];

    printf("length of array: ");
    scanf("%ld", &length);
    printf("input %ld elements in the array: ", length);

    N = length;
    for (i = 0; i < N; i += 1) {
    scanf("%ld", &arr[i]);
    }

    printf("\n%ld", arr[0]);
    printf("\n%ld", arr[1]);
    printf("\n%ld\n", arr[2]);

    printf("Array:");

    for(i=0;  i < N; i += 1) {
    printf("%ld", arr[i]);
    }

    return 0;
}

但是,当我分别打印出第三个元素时,我得到了垃圾值;使用循环打印出第二个和第三个元素时,我也得到了垃圾值。

length of array: 3
input 3 elements in the array: 1
2
3

1
2
8589934595
Array:1515396075588589934594

我已经尝试通过在互联网上搜索一周来调试代码,但是似乎没有答案可以帮助我解决此问题。如果我什至无法从用户输入和输出,就无法继续编码数组。请帮助我找出我的代码有什么问题。

2 个答案:

答案 0 :(得分:1)

您需要放置声明

long arr[length];

之后,您将从用户那里获得length的值。您正在使用length的未初始化值作为数组的大小。

long length;
long i;
long N;

printf("length of array: ");
scanf("%ld", &length);
printf("input %ld elements in the array: ", length);

long arr[length];

答案 1 :(得分:1)

数组arr的定义不正确,因此开始打印垃圾值。

这是我与您的代码一起获得的输出。 your code

这是尝试过的解决方案

    long length;
long i;
long N;


printf("length of array: ");
scanf("%ld", &length);
printf("input %ld elements in the array: ", length);

N = length;
long arr[length];
for (i = 0; i < N; i += 1) {
    scanf("%ld", &arr[i]);
}

printf("\n%ld", arr[0]);
printf("\n%ld", arr[1]);
printf("\n%ld\n", arr[2]);

printf("Array:");

for(i=0;  i < N; i +=1) {
    printf("%ld", arr[i]);
}

return 0;

我得到的输出是 this

您可以看到我在用户输入长度后声明了变量long arr [length]。

解决方案是,仅将第8行中的代码移至15