2016-11-29 4 views
0

, поэтому я пытаюсь создать программу, которая задает вопросы, и я отвечу на них, пока не решит остановиться (внутри цикла). Так, например, если я открыть файл, он должен выглядеть примерно так: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++». –

ответ

0

Предлагаю скопировать вопрос и ответы на файл.

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 не был объявлен в этой области, поэтому я заменил его возвратом 0; код затем работает, я могу ввести и нажать 0, но нет данных в test.txt – Insanebench420

0

std :: ofstream :: open по умолчанию не добавляется. Таким образом, в вашем случае он просто сделает файл с двумя входами для каждой итерации цикла и перезапишет его следующим.

0

Проблема в том, что каждый раз, когда ваш цикл работает, вы получаете новый указатель на свой файл, и вы начинаете перезаписывать то, что уже есть.

Есть 2 способа исправить это.

1) Я настоятельно рекомендую принять следующие три утверждения за пределами вашего цикла. Первые два перед циклом и последний после цикла. Это все равно даст вам возможность писать столько раз, сколько захотите.

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

myfile.close(); 

2) Откройте файл в режиме добавления. Для этого замените

myfile.open("test.txt"); 

с

myfile.open("test.txt", std::ios_base::app); 
Смежные вопросы