Чтение всех строк из файла и вывод их на экран - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста... Я ни как не могу заставить программу читать строки, которые Я пропишу в файл... Вот у Меня есть некий файл. В нём 5 строк, каждая строка состоит ровно из 10 символов. У Меня получилось считать лишь 1 строку. Если обьявить цикл 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);
Программа будет читать 1 строку, если же использовать след. код:
while (true)
{
fscanf(File, "%[^\n]", Vivod);
std::cout<<Vivod<<std::endl;
fscanf(File, "%[^\n]", Vivod);
std::cout<<Vivod<<std::endl;
break;
}
fclose(File);
Программа прочитает уже 2 строки (т.е. 1-я и 2-я)... Значит - ошибка не в чтении строк, а в цикле while (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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и вывода на экран
  2. Объявление переменной array типа char с длиной 80 символов
  3. Открытие файла text.txt в режиме чтения с помощью функции fopen
  4. Запуск цикла while, который будет выполняться до тех пор, пока функция fscanf успешно считывает строку из файла
  5. В каждой итерации цикла, функция fscanf считывает строку из файла, используя форматный параметр %79[^\n]\n, который считывает все символы, кроме символа новой строки, и добавляет символ новой строки после считывания
  6. Считанная строка сохраняется в переменной array
  7. С помощью функции printf выводится содержимое переменной array (считанная строка) и символ новой строки
  8. После завершения цикла, файл закрывается с помощью функции fclose
  9. Программа возвращает 0, что означает успешное завершение работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы