C++输出文件

问题描述:

所以我试图做一个程序,提出问题,我回答他们,直到我选择停止(其内部循环)。 因此,举例来说,如果我打开该文件,它应该是这个样子:C++输出文件

test.txt 
First question: 1. 
Second Question: 2. 
loop 
First question: 3. 
Second question: 4. 
loop 
... 

,但我发现只有最后输入我做。

do { 
cout<<"Enter 0 to end. \n"; 
cin >> a; 

ofstream myfile; 
myfile.open ("test.txt"); 
myfile << "First question: \n"; 
cin >> a; 
myfile << a; 
myfile << "Second question: \n"; 
cin >> b; 
myfile << b; 

myfile.close(); 
}while (a!=0); 
+0

你为什么要打开和关闭文件中的循环?从循环中获取该代码。如果您想要,也可以设置打开模式以追加。 – drescherjm

+0

我想继续输入数据,直到我决定停止。 – Insanebench420

+1

已经有很多类似的问题。在互联网上搜索“stackoverflow C++文件问题答案”。 –

我建议将问题和答案复制到文件中。

int main(void) 
{ 
    bool can_continue = true; 
    ofstream myfile("test.txt"); 
    while (can_continue) 
    { 
    std::string question; 
    std::cout << "First Question:\n"; 
    std::getline(cin, question); 
    my_file << "First Question:\n"; 
    my_file << question << "\n"; 

    std::cout << "Second Question:\n"; 
    std::getline(cin, question); 
    my_file << "Second Question:\n"; 
    my_file << question << "\n"; 

    std::cout << "\nEnter 0 to quit, any other number to continue:"; 
    int number; 
    std::cin >> number; 
    if (number != 0) 
    { 
     can_continue = false; 
    } 
    } 
    return EXIT_SUCCESS; 
} 

通过将提示复制到终端,您的用户可以知道是否会有输入。

请注意,使用operator>>std::string只会导致一个单词被读入。您将希望使用std::getline来输入文本,直到按下Enter。

+0

我还不够理解继续,而且代码在这个问题上不起作用。 – Insanebench420

+0

对不起,我的坏。 '继续'是一个保留字。查看我的编辑。 –

+0

EXIT_SUCCESS未在此范围内声明,因此我将其替换为return 0;代码然后工作,我可以输入并按0,但test.txt中没有数据 – Insanebench420

std :: ofstream :: open默认不附加。因此,在你的情况下,它会为每个循环迭代创建一个带有两个输入的文件,并将其覆盖下一个。

问题是,每次循环运行时,都会得到一个指向文件的新指针,然后开始覆盖已经存在的内容。

有两种方法可以解决这个问题。

1)我强烈建议的一个,在你的循环之外做以下三个陈述。循环前的前两个和循环后的最后一个。这仍然可以让您根据需要多次写入。

ofstream myfile; 
myfile.open ("test.txt"); 

myfile.close(); 

2)以追加模式打开文件。要做到这一点取代

myfile.open("test.txt"); 

myfile.open("test.txt", std::ios_base::app);