Проблема с функцией вывода строк. Как решить?

Имеется программа для формирования из списка билета,состоящего из трех вопросов. Решила ввести новую переменную n, которая будет обозначать количество таких билетов,однако,цикл хоть и работает,но функция,которая отвечает за билет, всегда выводит только 3 вопроса для одного билета. Подскажите в чем проблема,пожалуйста

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <ctime>

using namespace std;

void voprosi(int a)
{
    int r1, r2, r3, i;
    
    ifstream fin("ekz.txt");
    ofstream fout("voprosi.txt");
    
    string line;
    
    r1 = r2 = r3 = 0;
    
    srand(time(0));
    
    r1 = 1 + rand() % a;
    r2 = 1 + rand() % a;
    r3 = 1 + rand() % a;
    
    while(r2==r1)
    {
         r2 = 1 + rand() % a;
         
    }
    
    while(r3==r2 or r3==r1)
    {
         r2 = 1 + rand() % a;
         
    }
    
    int k = 0;
    
    for (size_t line_no = r1; line_no && getline(fin, line);--line_no);  //выводит строку под номером,заданным r1
    for (i=0; k == 0;i++)
    {
        if(line[i]==')' or line[i]=='.')
        {
          k = i + 1;
          line.erase(0,k);
        }
    }
    fout << line << endl;
    
    k = 0;
    
    for (size_t line_no = r2; line_no && getline(fin, line);--line_no);  //выводит строку под номером,заданным r2
    for (i=0; k == 0;i++)
    {
        if(line[i]==')' or line[i]=='.')
        {
          k = i + 1;
          line.erase(0,k);
        }
    }
    fout << line << endl;
    
    k = 0;
    
    for (size_t line_no = r3; line_no && getline(fin, line);--line_no);  //выводит строку под номером,заданным r3
    for (i=0; k == 0;i++)
    {
        if(line[i]==')' or line[i]=='.')
        {
          k = i + 1;
          line.erase(0,k);
        }
    }
    fout << line << endl;
    fout << endl;
}

int main()
{
    setlocale(LC_ALL, "Russian");
    
    int a, i, n;
    
    i = 0;
    
    ifstream fin("ekz.txt");
    ofstream fout("voprosi.txt");
    
    cout<< "Введите общее количество вопросов для экзамена:"<<endl;
    cin >> a; 
    
    cout<< "Введите количество билетов:"<<endl;
    cin >> n; 
    
    while(i < n)
    {
       voprosi(a);
       i++; 
       //cout<< i<< endl; //проверка входа в цикл
    }
    
    fout.close();
    fin.close();
    
    cout<< "Билет из трех вопросов готов."<<endl;
    
    return 0;
}

Ответы (1 шт):

Автор решения: Mikhailo

Исправьте:

void voprosi(int a)

на

void voprosi(int a, ostream& fout)

Уберите из функции voprosi строку

ofstream fout("voprosi.txt");

и код

while(i < n)
{
   voprosi(a);

замените на

while(i < n)
{
   voprosi(a,fout);

Должно помочь...

→ Ссылка