-1

我似乎无法弄清楚为什么在底部的 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(我把它放在这里是因为我还不能投票),我能够让代码工作!

我还在我的书中做了一些研究,并复制了一个类似程序的风格。也就是把代码的哪一部分放在哪里,然后输入就起作用了。我继续输出,关键部分是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;
    }
}    

谢谢大家的帮助!

4

3 回答 3

2

您需要刷新输出缓冲区。

ticketFile << ticketInput;

应该

ticketFile << ticketInput << std::endl;

std::endl刷新输出缓冲区。如果您不想要新行,请参阅std::flush 。

于 2013-11-02T07:43:47.887 回答
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++ 库的信息。检查您正在使用的每个函数或类。当然,你还需要std::flush on ticketFile

于 2013-11-02T07:39:03.267 回答
-1

也许文件需要以写模式打开。尝试这个 std::ofstream ticketFile("test.txt","w");

于 2013-11-02T07:47:16.737 回答