Как читать из файла .txt в консольной программе C? - PullRequest
0 голосов
/ 26 февраля 2020

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

1,2 3,4 5,6

или:

1,2
3,4
5,6
4,3

Вот мой код

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


void swap(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

int partition(int arr[], int low, int high)
{
    int pivot = arr[high];    // pivot 
    int i = (low - 1);  // Index of smaller element 

    for (int j = low; j <= high - 1; j++)
    {
        // If current element is smaller than the pivot 
        if (arr[j] < pivot)
        {
            i++;    // increment index of smaller element 
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}

void quickSort(int arr[], int low, int high)
{
    if (low < high)
    {
        /* pi is partitioning index, arr[p] is now
           at right place */
        int pi = partition(arr, low, high);

        // Separately sort elements before 
        // partition and after partition 
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

void printArray(int arr[], int size)
{
    int i;
    for (i = 0; i < size; ++i)
        printf("%d ", arr[i]);

}
int main()
{
    int n1, n2;
    int x[10] = { 0 };
    int y[10] = { 0 };

    int capacity = 0;

    int n = sizeof(x) / sizeof(x[0]);

    for (size_t i = 0; i < n; ++i)
    {

        scanf_s(" %d , %d [^\n]", &n1, &n2);
            x[i] = n1;
            y[i] = n2;

    }

    for (int j = 0; j < n; ++j)
    {
        printf("%d , %d\n", x[j], y[j]);

    }
    quickSort(x, 0, n-1);
    printArray(x, n);

    printf("Minimum is: %d", x[0]);
    printf("Maximum is: %d", x[n-1]);
    return 0;
}

Однако, когда я пытаюсь передать файл в консоль, запустив команду в CMD: program.exe some.txt

, она выдаст:

-858993460 , -858993460
-858993460 , -858993460
...

Но когда я набираю значения из txt-файла, я получаю правильный вывод.

Можно ли в любом случае разрешить консольной программе C принимать пользовательский ввод и файл .txt?

Мой профессор показал пример использования scanf_s, где он может просто использовать debug.exe и txt-файл для получения ввода, он сказал, что это заставляет программу думать, что она пришла из буфера клавиатуры. Я не совсем понимаю, как это будет работать.

Коды ошибок из CMD:

C: \ Users \ имя пользователя \ Downloads \ Project \ test_files> sort.exe book.txt -> sort.exe

Процесс не может получить доступ к файлу, поскольку он используется другим процессом.

Другая ошибка - красное всплывающее окно, говорящее, что я должен получить Финальную версию (это всплывающее окно с windows).

1 Ответ

0 голосов
/ 26 февраля 2020

Ваша командная строка неверна.

Вместо:

sort.exe < book.txt -> sort.exe < book.txt

вы хотите:

sort.exe < book.txt | sort.exe > book2.txt

Но в любом случае я не уверен, что именно вы ' Вы пытаетесь сделать здесь ...

Имейте в виду, что вам нужен другой файл book2.txt вместо book.txt, вот причина ошибки The process cannot access the file because it is being used by another process..

...