C программа не пишет в файл? - PullRequest
0 голосов
/ 05 марта 2020

Моя программа не будет записывать в файл после получения ввода. Все остальное работает, как и ожидалось.

Где я ошибся?

#include <stdio.h>
#include <unistd.h>

int main()
{
    char fileSelectionInput[20];

    printf("Select a file to print to: ");
    gets(fileSelectionInput);

    if (access(fileSelectionInput, F_OK ) == -1) {
        puts("It seems that this file does not exist, sorry.");
        return 0;
    }

    printf("Okay now you can type text to append\n\n");

    FILE* testFile = fopen(fileSelectionInput, "w+");

    int writesLeft = 10;

    while (writesLeft > 1)
    {
        char textInput[50];
        gets(textInput);
        fputs(textInput, testFile);
        writesLeft--;
    }

    fclose(testFile);

    return 0;
}

1 Ответ

2 голосов
/ 05 марта 2020

Проблема в основном заключается в использовании get.

Попробуйте выполнить следующие изменения, где я использовал scanf и fgets:

#include <stdio.h>
// #include <unistd.h>

int main() {
    char fileSelectionInput[20];

    printf("Select a file to print to: ");
    scanf("%19s", fileSelectionInput);  // %19s checks the size of input

    // if (access(fileSelectionInput, F_OK ) == -1) {
    //     puts("It seems that this file does not exist, sorry.");
    //     return 0;
    // }

    printf("Okay now you can type text to append\n\n");

    FILE* testFile = fopen(fileSelectionInput, "a+");

    if (testFile == NULL) {
       perror("fopen()");
       return 1;
    }

    int writesLeft = 10;

    while (writesLeft > 1) {
        char textInput[50];
        fgets(textInput, sizeof(textInput), stdin);
        fputs(textInput, testFile);
        --writesLeft;
    }

    fclose(testFile);

    return 0;
}

Когда вы проверяете результат fopen, вы не можете не нужно проверять, существует ли файл с access. Это делает ваш код более переносимым.

Я использовал %19s в scanf, поэтому он не будет писать за пределами массива; В него помещается 19 символов и 1 нулевой байт.

...