Проблема с функцией вывода строк. Как решить?
Имеется программа для формирования из списка билета,состоящего из трех вопросов. Решила ввести новую переменную 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);
Должно помочь...