如何在 C++ 中逐行读取多行文件?

How to read a file having multiple lines, line by line in C++?

我正在尝试读取一个包含多行的文件,其中每行都有一个单词,然后是一个 space,后跟对该单词的简短描述。

文本文件示例:

hello A type of greeting
clock A device which tells us the time
.

末尾的句号(.)表示没有更多行可读

我尝试了一种在 getline() 函数中使用定界符的方法,但只成功读取了文件的一行。我想将第一个单词(第一个 space 之前)存储在一个变量中,比如 word,以及描述(第一个 space 之后的单词,直到遇到换行符)另一个变量,比如 desc.

我的做法:

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int main()
{
    string filename = "text.txt" ;
    ifstream file (filename);
    if (!file)
    {
        cout<<"could not find/open file "<<filename<<"\n";
        return 0;
    } 

    string word;
    string desc;
    string line;


    while(file){
        getline(file,line,' ');
        
        word = line;
        break;
    }
    while(file){
        getline(file,line,'\n');
        desc = line;
        break;
    }    

   file.close();
    cout<<word<<":  ";
    cout<<desc<<"\n";

    return 0;
}

以上代码的输出为:

hello:  A type of greeting

我尝试将另一个父 while 循环添加到上面写的那些,具有条件 file.eof(),但是程序永远不会进入两个子循环。

你不需要多次循环,一个循环就足够了。读取一行,然后根据需要使用 std::istringstream 将其拆分。对每一行重复。

例如:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string filename = "text.txt";
    ifstream file (filename);
    if (!file)
    {
        cout << "could not find/open file " << filename << "\n";
        return 0;
    } 

    string word;
    string desc;
    string line;

    while (getline(file, line) && (line != ".")) {
        istringstream iss(line);
        iss >> word;
        getline(iss, desc);
        cout << word << ":  " << desc << "\n";
    }

    return 0;
}