我似乎无法弄清楚为什么,在底部的while循环中,
std::cout << line;
不会打印任何内容。
我相信test.txt文件实际上并没有被写入,因为当我在我的文件夹中打开test.txt时,它是空的。有什么想法吗?
void Ticket::WriteTicket()
{
std::string ticketInput;
std::ofstream ticketFile("test.txt");
ticketFile.open("test.txt");
std::cout << "Please Enter Ticket Information: " << std::endl;
getline(std::cin, ticketInput);
std::cout << ticketInput << std::endl; //does print out the line
ticketFile << ticketInput;
ticketFile.close();
//here for testing only
std::string line;
std::ifstream ticketRead("test.txt");
while(getline(ticketRead, line));
{
std::cout << "something here?: " << line; // there is nothing here when it outputs
}
}
编辑(解决方案):
使用上面给出的一些信息后,主要来自 Basile Starynkevitch (我把它放在这里,因为我还不能投票),我能够让代码工作!
我也在书中做了一些研究并复制了类似程序的风格。 Aka在哪里放置代码的哪一部分,然后输入工作。我继续输出,关键部分是文件打开中的std::ifstream::in
输出。
void Ticket::WriteTicket()
{
std::string ticketInput;
std::cout << "Please Enter Ticket Information: " << std::endl;
getline(std::cin, ticketInput);
std::ofstream ticketFile("Ticket.txt");
ticketFile << ticketInput << std::endl;
ticketFile.close();
//here for testing
std::ifstream ticketRead;
ticketRead.open("Ticket.txt", std::ifstream::in);
std::string line;
while(getline(ticketRead, line))
{
std::cout << line << std::endl;
}
}
感谢大家的帮助!
答案 0 :(得分:2)
您需要刷新输出缓冲区。
ticketFile << ticketInput;
应该是
ticketFile << ticketInput << std::endl;
std::endl刷新输出缓冲区。如果您不想要新行,请查看std::flush。
答案 1 :(得分:0)
C++ I/O已缓冲。至少代码
std::cout << "something here?: " << line << std::flush;
但在你的情况下
std::cout << "something here?: " << line << std::endl;
会更好。
另外
std::ofstream ticketFile("test.txt")
应该是
std::ofstream ticketFile("test.txt", std::ios_base::out);
我强烈建议您在编码之前花一些时间阅读有关C++ libraries的更多信息。检查您正在使用的每个功能或类。当然,您还需要ticketFile
上的std::flush。
答案 2 :(得分:-1)
可能需要在写入模式下打开文件。
试试这个
std::ofstream ticketFile("test.txt","w");