Чтение всех строк из файла и вывод их на экран - C (СИ)
Формулировка задачи:
Помогите пожалуйста... Я ни как не могу заставить программу читать строки, которые Я пропишу в файл...
Вот у Меня есть некий файл. В нём 5 строк, каждая строка состоит ровно из 10 символов.
У Меня получилось считать лишь 1 строку.
Если обьявить цикл while (file) {...}, то, вроде бы как, переход к след. строке файла должен осуществляться сам. Однако, при запуске программы, когда, как бы, файл бы загружен, у Меня выводится бесконечно одна и та же строка...
Подскажите, в чём проблема?
Программа будет читать 1 строку, если же использовать след. код:
Программа прочитает уже 2 строки (т.е. 1-я и 2-я)...
Значит - ошибка не в чтении строк, а в цикле while (file)... Хотя - в чём ошибка - так и не понял... По логике - цикл будет продолжатся до тех пор, пока файл не закончится(т.е. до конца файла)... Однако, опять же, цикл у Меня идёт бесконечный...
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <stdio.h>
FILE* File=NULL;
char FileWay[255];
char Vivod[255];
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
system("cls");
File=fopen("text.txt", "r");
if (File==NULL) puts("Загрузка файла завершена с ошибкой!");
else
{
while (File)
{
fscanf(File,"%[^\n]",Vivod);//Вот здесь происходит чтение(как Я понял - тут идёт чтение до тех пор, пока не будет указан переход на след. строку)
//Однако, данный цикл продолжается бесконечно, и на экран будет выводится всё время один и тот же текст(т.е. 1-я строка)
printf("%s\n", Vivod);
}
fclose(File);
}
system("pause");
return 0;
}
Заметил, что если использовать след. код:
while (true)
{
fscanf(File, "%[^\n]", Vivod);
std::cout<<Vivod<<std::endl;
break;
}
fclose(File);while (true)
{
fscanf(File, "%[^\n]", Vivod);
std::cout<<Vivod<<std::endl;
fscanf(File, "%[^\n]", Vivod);
std::cout<<Vivod<<std::endl;
break;
}
fclose(File);
Однако, когда использую код fscanf(File, "%[^\n]", Vivod); - загружается вся строка, а когда fscanf(File, "%s\n", Vivod); - лишь до 1-го пробела
Решение задачи: «Чтение всех строк из файла и вывод их на экран»
textual
Листинг программы
#include<stdio.h>
int main()
{
char array[80];
FILE *file = fopen("text.txt", "r");
while( fscanf(file, "%79[^\n]\n", array) == 1 )
{
printf("%s\n", array);
}
fclose(file);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и вывода на экран
- Объявление переменной
arrayтипаcharс длиной 80 символов - Открытие файла
text.txtв режиме чтения с помощью функцииfopen - Запуск цикла
while, который будет выполняться до тех пор, пока функцияfscanfуспешно считывает строку из файла - В каждой итерации цикла, функция
fscanfсчитывает строку из файла, используя форматный параметр%79[^\n]\n, который считывает все символы, кроме символа новой строки, и добавляет символ новой строки после считывания - Считанная строка сохраняется в переменной
array - С помощью функции
printfвыводится содержимое переменнойarray(считанная строка) и символ новой строки - После завершения цикла, файл закрывается с помощью функции
fclose - Программа возвращает 0, что означает успешное завершение работы программы