Я бы сделал пару вещей для вашей функции list_print
:
- передать переменную
FILE*
, чтобы вы могли указать, куда файл должен идти.
- не инициализировать
temp
в NULL
, поскольку вы все равно задаете его в операторе for
.
Это даст вам что-то вроде:
void list_print(FILE *fOut, INTLIST* list) {
INTLIST *temp;
for (temp = list; temp != NULL; temp = temp->next)
fprintf (fOut, "%d ", temp->datum);
fprintf (fOut, "\n");
}
Чтобы использовать его для печати на стандартный вывод, просто используйте:
list_print (stdout, list);
, поскольку stdout
- это просто FILE*
для стандартного вывода (и вы также можете использовать stderr
, если хотите). Если вы хотите записать его в файл:
FILE *fp = fopen ("output_file.txt", "w");
if (fp == NULL) {
// Flag an error.
} else {
list_print (fp, list);
fclose (fp);
}
Также можно внести изменение, чтобы избавиться от постороннего пространства в конце каждой строки, когда конкретный список не пуст. На данный момент список (1,2,3) будет напечатан как (_
символы - пробелы):
1_2_3_
Если вы измените функцию на:
void list_print(FILE *fOut, INTLIST* list) {
INTLIST *temp;
char *sep = "";
for (temp = list; temp != NULL; temp = temp->next) {
fprintf (fOut, "%s%d", sep, temp->datum);
sep = " ";
}
fprintf (fOut, "\n");
}
в конце избавится от этого постороннего пространства. То, действительно ли это необходимо, - это решение для вас - я часто делал это, чтобы иметь определенный формат вывода, не делая код слишком уродливым, но вполне возможно, что пространство в конце не доставит вам никаких проблем .