我尝试在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;
}
答案 0 :(得分:2)
执行cin >> textFile
时,可能会输入文本文件的名称,然后按Enter键。 cin
的提取运算符在流中留下新行。来自docs:
如果满足以下条件之一,则提取将停止:
找到空格字符(由ctype facet确定)。 不提取空白字符。
...
(强调我的)
所以当你进入你的循环并运行cin.get()
时,就会得到剩下的换行符。
由于您没有在line
之后输出任何内容(如换行符),因此单词会显示为连接状态。
解决方案可能是在getline
上运行cin
一次,然后再进入循环以确保清除所有用户输入(getline
将占用尾随空格),即: getline(cin, junk)