如何在c ++中逐行读取文本

时间:2017-09-28 22:07:25

标签: c++ file-io

我尝试在c ++中逐行阅读文本并且成功了。唯一的问题是我希望用户按下键盘上的“输入”键,除了第一行之外,每行都要读取。我的代码有效,但前两行总是一行打印一行。例如,用户输入“brands.txt”作为文件的名称,并打印以下内容。

  三星桑   东芝   acer

而不是:

  三星
  苹果
  东芝   acer

这可能是编译器错误还是我的代码错了?这是我的代码:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream myFile;
    string textFile;
    string line;
    string::size_type ext;
    int count = 0;

    // request and obtain the name of the text file
    cout << "Enter the name of the file including the '.txt' extension: ";
    cin >> textFile;

    myFile.open(textFile.c_str());  // open the file

    if(myFile.is_open())    // checks if the file is open and ready to be accessed
    {
        while(getline(myFile, line))
        {
            cout << line;
            count += 1;
            cin.get();
        }
    }
    myFile.close();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

执行cin >> textFile时,可能会输入文本文件的名称,然后按Enter键。 cin的提取运算符在流中留下新行。来自docs

  

如果满足以下条件之一,则提取将停止:

     

找到空格字符(由ctype facet确定)。 不提取空白字符。

     

...

(强调我的)

所以当你进入你的循环并运行cin.get()时,就会得到剩下的换行符。

由于您没有在line之后输出任何内容(如换行符),因此单词会显示为连接状态。

解决方案可能是在getline上运行cin一次,然后再进入循环以确保清除所有用户输入(getline将占用尾随空格),即: getline(cin, junk)