c++ - 为什么我的 cout 语句在打开文本文件后不打印?

标签 c++ ifstream cout

我正在尝试编写一个程序,我在其中读取文本文件,然后获取文本文件中的每一行并将它们存储在字符串 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 是空的;因此,对于任何 ilines[i] 都会返回对无效内存的引用。当 getline 尝试访问该内存时,程序崩溃。

如果您希望在尝试访问 vector 的越界索引时抛出异常,请使用 lines.at(i)而不是 lines[i] .

关于c++ - 为什么我的 cout 语句在打开文本文件后不打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262864/

相关文章:

c++ - 将字符串作为二进制写入/读取到随机访问的文件中

通过引用从函数调用的 C++ 构造函数

C++ "No overloaded function takes 0 arguments"错误

带前缀的 C++ cout

c++ - OOP C++ 第一个编译器错误

java - Opencv - 构建 Opencv 失败 (MacOSX)

c++ - 在 C++ 中使用 '+' 运算符将字符附加到字符串文字时究竟会发生什么?

ifstream::open() 的 C++ 类型参数

c++ - 无法在头文件中声明 ifstream 类成员

cout - 简单分离的 pthread 不会取消! (即使互斥,cout 也会 block 和交错)