Для моего кода C, где я читаю файл и сортирую его, я получаю вывод мусора.Зачем? - PullRequest
0 голосов
/ 28 марта 2019

Я выполняю задание, которое: Найти k самых больших элементов файла.Выделите массив размера k, и пока вы читаете числа из файла, сохраните k самых больших чисел в массиве.Когда вы читаете следующий элемент из файла, найдите, нужно ли изменять массив или нет.Предположим, что следующим считанным элементом является 80. Поскольку 80 больше, чем наименьший элемент, нам нужно сместить элементы <80 вправо на 1 позицию и создать пробел для 80. В main () используйте argc и argv для чтения имени файла и kот пользователя и вычислить и распечатать k самых больших элементов.Назовите вашу программу assign3.c Первый параметр - это имя файла, а второй - k.Вам нужно использовать atoi () в stdlib.h для преобразования строк в целое число. </p>

Моя проблема в том, что я получаю значения мусора как для arr, так и для отсортированного arr?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int main(int argc, char *argv[])//
{
    FILE *iFile;//file pointer
    int i = 0, n, temp = 0, count = 0, j;
    int k = atoi(argv[1]);//convert strings into int    
    int *arr = (int *)malloc(k * sizeof(int));////allocate an array of size k
    iFile = fopen("a.txt", "r");//opens file
    if (iFile == NULL)
        return -1;
    while (feof(iFile) <= 0)
    {
        fscanf(iFile, "%d", arr);
        printf("arr= %d\n", arr);
        count = count++;
        for (i = 0; i < count; i++)                     //Loop for descending ordering
        {
            for (j = 1; j <= count; j++)             //Loop for comparing other values
            {
                if (arr[j] < arr[i])                //Comparing other array elements
                {
                    temp = arr[i];         //Using temporary variable for storing last value
                    arr[i] = arr[j];            //replacing value
                    arr[j] = temp;             //storing last value
                }
            }
        }
    }
    for (i = 0; i < k + 1; i++)
        printf("sorted arr is =%d\n", arr[i]);

    fclose(iFile);
    free(arr);
}

1 Ответ

0 голосов
/ 28 марта 2019

Используйте условие цикла while, как это

В то время как (! Feof (IFILE)) ....

feof () проверяет, достигнут ли конец файла, и возвращает 0, в противном случае

...