我正在尝试编写一个程序,我在其中读取文本文件,然后获取文本文件中的每一行并将它们存储在字符串 vector 中。我想我可以打开文本文件,但是我注意到在我打开文本文件之后,该点之后的任何内容都不会执行。例如,当我输入一个不存在的文件名时,我的 main 函数末尾有一个 cout 语句输出。但是,如果我输入一个确实存在的文件名,我从最后一个 cout 语句中得不到任何输出。有谁知道这是为什么?谢谢!
int main()
{
vector<string>line;
string fileName = "test.txt";
ifstream myFile(fileName.c_str());
int i = 0;
int count = 0;
vector<string>lines;
cout << "test" << endl;
if (myFile.is_open())
{
cout << "test2" << endl;
while (!myFile.eof())
{
getline(myFile, lines[i],'\n');
i++;
}
myFile.close();
}
if (!myFile.is_open())
{
cout<< "File not open"<< endl;
}
myFile.close();
cout << "Test3" <<endl;
return 0;
}
最佳答案
尝试 this :
string fileName = "test.txt";
ifstream myFile(fileName); // .c_str() not needed - ifstream can take an actual string
vector<string> lines;
string line; // temporary variable for std::getline
while (getline(myFile, line)) {
lines.push_back(line); // use push_back to add new elements to the vector
}
正如评论中所指出的,您的程序似乎过早“结束”的最可能原因是它正在崩溃。 std::getline
将对 string
的引用作为其第二个参数。在你的代码中,你的 vector 是空的;因此,对于任何 i
,lines[i]
都会返回对无效内存的引用。当 getline
尝试访问该内存时,程序崩溃。
如果您希望在尝试访问 vector
的越界索引时抛出异常,请使用 lines.at(i)
而不是 lines[i]
.
关于c++ - 为什么我的 cout 语句在打开文本文件后不打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262864/