#c
#c
Вопрос:
Я пытаюсь записать свои результаты в выходной файл, запустив эту программу на C в терминале Mac. Я проверил, что все части программы работают путем записи непосредственно в терминал, но когда я пытаюсь записать в файл, ничего не происходит.
Строка «запись в файл» выполняет запись на каждой итерации, однако ничего не происходит с 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, "%fn", output_nodes[p][k]);
fprintf(stdout, "Writing to filen");
}
}
fclose(ofp);
Ответ №1:
Вы открываете файл в режиме чтения, см.https://linux.die.net/man/3/fopen.
Если вы хотите выполнить запись в файл, вы должны открыть файл в режиме, поддерживающем запись, например: fopen(ofile_name, "w")
.
Ваши основные параметры, если вы хотите выполнить запись только в файл, следующие:
- «w», который создаст файл, если он не существует, в противном случае он сократит файл до длины 0 (удалит все в файле) и позволит вам выполнять запись в него; или,
- «a», который будет добавлен в конец существующего файла.
Кроме того, если вы посмотрите на ссылку, упомянутую ранее, вы должны заметить, что функция может возвращать значение null, если файл не открывается успешно. Из-за этого вам следует проверить, не равен ли ФАЙЛ *, возвращаемый fopen, null, прежде чем работать с ним.
#define OUTPUTFILE "outputdata.txt"
FILE *ofp;
char ofile_name[50] = OUTPUTFILE;
ofp = fopen(ofile_name, "r");
if (ofp) { // NOTE: added NULL check.
for (p = 1; p <= NumPattern ; p ) {
for (k = 1 ; k <= numnodes_out ; k ) {
fprintf(ofp, "%fn", output_nodes[p][k]);
fprintf(stdout, "Writing to filen");
}
}
fclose(ofp);
}