文件未保存或未保存

时间:2013-11-02 07:36:28

标签: c++

我似乎无法弄清楚为什么,在底部的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;
    }
}    

感谢大家的帮助!

3 个答案:

答案 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");