Печать массива с использованием циклов дает значения мусора, но печать по отдельности дает правильные значения - PullRequest
0 голосов
/ 17 марта 2019

Я только начал заниматься программированием на С 2 месяца назад, и я сам учусь читать книги.Поэтому, если есть какие-то вредные привычки или что-то, что я могу сделать, чтобы улучшить кодирование на 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 ]

1 голос
/ 17 марта 2019

Массив arr не определен правильно, и поэтому он начинает печатать значение мусора.

Это был вывод, который я получил с вашим кодом. ваш код

Вот решение, которое попыталось

    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;

И результат, который я получил, был это

Вы можетесм., что я объявил переменную long arr [length] после того, как пользователь ввел длину.

Таким образом, решение состоит в том, чтобы просто переместить код в строке номер 8 на 15

1 голос
/ 17 марта 2019

Нужно поставить декларацию

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...