Программа на C отображает значение мусора, принимая пользовательский ввод с помощью scanf - PullRequest
0 голосов
/ 30 августа 2018

Я писал программу на C для поиска инверсий в массиве. Программа компилируется плавно, но как только я ее запускаю, она отображает значение мусора, где я беру массив в качестве входных данных. Программа приведена ниже:

#include <stdio.h>
#include <stdlib.h>

int checkInversions(int arr[], int n) {
    int i, j, inverse_count = 0;

    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                inverse_count++;
            }
        }
    }
    return inverse_count;
}

int main() {
    int arr[10], i, n;

    printf("Enter the elements of the array: %d");

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

    n = sizeof(arr) / sizeof(arr[0]);   

    printf("\n The inverse is: %d", checkInversions(arr, n));

    return 0;
}

Теперь, когда отображается оператор Enter the elements of the array:, рядом с ним стоит мусор, такой как 623089. Я могу принять вход, но результат не является правильным. Какова причина этого? Любая помощь в этом отношении будет оценена.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Я думаю, что вам не хватает переменной, которая должна заполнять %d на printf. Попробуйте убрать %d на printf вызове, чтобы он закончился примерно так:

printf("Enter the elements of the array: ");

Или назначьте соответствующую переменную для отображения с "%d", например:

printf("Enter the elements of the array: %d", variable);

Проверьте, помогает ли это!

0 голосов
/ 30 августа 2018

Ваша проблема printf("Enter the elements of the array: %d");. Вы сообщаете программе, что хотите напечатать целое число, но не указываете, какое это целое число. Удалите %d, и значение мусора исчезнет, ​​например: printf("Enter the elements of the array: ");

0 голосов
/ 30 августа 2018

Вы вызываете printf с спецификатором формата для %d и ничего не передано для удовлетворения переменной, ожидаемой строкой формата. Это неопределенное поведение.

То, что вы хотели сделать, было просто:

printf("Enter the elements of the array: ");

Кроме того, так как arr имеет 10 элементов, вы повторяете его так:

for(i = 0; i < 10; i++)

Вам не нужно использовать sizeof для определения размера массива, поскольку вы уже знаете его; это 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...