Проблема в том, что вы пытаетесь напечатать указатель ФАЙЛ вместо содержимого файла - вам нужна переменная для его хранения.
Было интересно увидеть другие подходы. Вот реализация с fscanf () -
#include <stdio.h>
#define FILENAME "test.txt"
int main(void)
{
FILE *myfile;
char string[81] = {'\0'};
myfile=fopen(FILENAME , "r");
if(myfile == NULL)
{
printf("The file test.txt could not be found! Exiting...\n");
return -1;
}
while(fscanf(myfile, " %80[^\n]s", string) != EOF)
{
printf("%s\n", string);
}
fclose(myfile);
return 0;
}
Когда вы открываете файл, если операция завершается неудачно, возвращается NULL, рекомендуется проверить это явно, чтобы вы знали, что пошло не так.
fscanf () возвращает количество успешных чтений (здесь будет 1 для 1 преобразования в строку) или EOF, если достигнут конец файла. Строка формата использует пробел в первую очередь для удаления любых предшествующих пробелов (новые строки, пробелы, табуляции) во входном потоке.
Использование спецификатора ширины поля (80) в функциях scanf () означает, что будет прочитано только это много символов, поэтому ввод не может пройти дальше выделенного пространства - полезно!
[^] означает, что поток будет читаться только до тех пор, пока не встретятся указанные символы. [^ \ n] - это способ получить строки с пробелами в них, так как семейство scanf () обычно только читает пробелы для строк. Обратите внимание, что символ новой строки не будет удален (он все еще первый в потоке).
Затем печатает строку с добавлением новой строки. Эта программа будет проходить через столько строк (до 80 символов, разделенных символами новой строки) в файле. Если вы хотите сохранить строки, вы можете сделать строку массивом массивов символов и увеличивать каждый раз. Здесь первый пробел в строке формата fscanf () пригодится, он удалит символ новой строки (и любой другой предшествующий пробел), который все еще находится в начале потока.
Я не нашел каких-либо окончательных учебных пособий для изучения C онлайн, но есть много доступных. Нынешний стандарт не подходит для начинающих, но черновая форма находится в свободном доступе: http://www.open -std.org / jtc1 / sc22 / wg14 / www / docs / n1124.pdf
Еще один хороший ресурс (но не учебник) - http://c -faq.com /
Лучшим справочным материалом для входов и выходов стандартных функций библиотеки, который я нашел, является справочное руководство Harbison & Steele C: A, но, к сожалению, оно не бесплатное.