У меня проблемы с пониманием части этого кода, который я нашел в Интернете, его цель - распечатать ASCII-арт из файла .txt. Чтобы быть более точным, мне сложно понять цикл while в строке 28, который является частью строковой функции getFileContents. Что означает «TempLine»?

#include <iostream>
#include <fstream>

#include <string>

std::string getFileContents (std::ifstream&);            //Gets file contents

int main(int argc, char *argv[])
{

    std::ifstream Reader ("File1.txt");             //Open file

    std::string Art = getFileContents (Reader);       //Get file
    
    std::cout << Art << std::endl;               //Print it to the screen

    Reader.close ();                           //Close file

    return 0;
}

std::string getFileContents (std::ifstream& File)
{
    std::string Lines = "";        //All lines
    
    if (File)                      //Check if everything is good
    {
    while (File.good ())
    {
        std::string TempLine;                  //Temp line
        std::getline (File , TempLine);        //Get temp line
        TempLine += "\n";                      //Add newline character
        
        Lines += TempLine;                     //Add newline
    }
    return Lines;
    }
    else                           //Return error
    {
    return "ERROR File does not exist.";
    }
}
-1
Syn1110 22 Фев 2021 в 02:58

1 ответ

Лучший ответ

Если вы посмотрите на std::getline(), вы можете видите, что строковый параметр передается по неконстантной ссылке. Это означает, что строка может (и редактируется) с помощью функции std::getline(). Итак, строка за строкой:

    // Loop until the file stream cannot read any more input.
    while (File.good ())
    {
        // Create a new, empty string called `TempLine`
        std::string TempLine;

        // Read a line from `File`, and write it into TempLine.
        std::getline (File , TempLine);

        // Add a newline character at the end of the string.
        TempLine += "\n";
        
        // Add the line we just read from the file to the `Lines` string,
        // which holds the full file contents.
        Lines += TempLine;                     //Add newline

    // Repeat until all lines have been read from the file (or the file
    // becomes otherwise unreadable).
    }

Причина, по которой TempLine требуется, состоит в том, что std::getline() нужно что-то для чтения содержимого файла, и если мы передадим Lines непосредственно в функцию, мы вернем только последнюю строку файл (предыдущие строки всегда перезаписывались в строке).

0
Karl Nicoll 23 Фев 2021 в 01:32