Невозможно записать в файл в программе C - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь записать свои результаты в выходной файл, запустив эту программу на Си в Mac Terminal. Я проверил, что все части программы работают, записав напрямую в терминал, но когда я пытаюсь записать в файл, ничего не происходит.

Строка "write to file" записывает на каждой итерации, однако с файлом outputdata.txt ничего не происходит.

Я изменил разрешения и могу писать в этот файл прямо из терминала. Тем не менее, это не работает с использованием приведенного ниже кода.

#define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

for (p = 1; p <= NumPattern ; p++) {
    for (k = 1 ; k <= numnodes_out ; k++) {
        fprintf(ofp, "%f\n", output_nodes[p][k]);
        fprintf(stdout, "Writing to file\n");
    }
}
fclose(ofp);

1 Ответ

4 голосов
/ 23 марта 2019

Вы открываете файл в режиме чтения, см. https://linux.die.net/man/3/fopen.

Если вы хотите записать в файл, вы должны открыть файл в режиме, который поддерживает запись, например: fopen(ofile_name, "w").

Ваши основные параметры, если вы хотите записать в файл:

  1. "w", который создаст файл, если он не существует, в противном случае он обрежет файл до 0 длины (удалит все в файле) и позволит вам записать в него; или
  2. «а», который будет добавлен в конец существующего файла.

Кроме того, если вы посмотрите на ранее упомянутую ссылку, вы должны заметить, что функция может вернуть ноль, если файл не открывается успешно. Из-за этого вы должны проверить, не равен ли FILE *, возвращаемый fopen, значением NULL, прежде чем работать с ним.

#define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

if (ofp) {
    for (p = 1; p <= NumPattern ; p++) {
        for (k = 1 ; k <= numnodes_out ; k++) {
            fprintf(ofp, "%f\n", output_nodes[p][k]);
            fprintf(stdout, "Writing to file\n");
        }
    }
    fclose(ofp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...