Используя одну из ваших функций в качестве примера:
void draw_rect (char out_char, int rows, int columns)
{
ofstream outfile;
Это объявляет новый объект std::ofstream
в вашей функции draw_rect()
.draw_rect()
не открывает этот std::ofstream
объект, поэтому попытки draw_rect
() что-либо записать в этот outfile
абсолютно ничего не делают.
Тот факт, что вы создали std::ofstream
объектс тем же именем в вашем main()
, которое вы открыли, абсолютно ничего не значит.Тот факт, что у вас один и тот же объект с одинаковым именем в разных функциях, не означает, что это один и тот же объект.C ++ не работает таким образом.
Вам нужно изменить функцию main()
, чтобы она передавала outfile
в каждую функцию, по ссылке, в качестве параметра, вместо того, чтобы объявлять другой объект с тем же именем в каждомфункция.Вышеприведенная функция будет, например:
void draw_rect (ofstream &outfile, char out_char, int rows, int columns)
{
. Вам нужно будет изменить каждую из ваших функций, чтобы получить параметр outfile
по ссылке, например, изменить их предварительные объявления и явно передать outfile
в качестве первого параметра из main()
, в каждом вызове функции.
Наконец, относительно вашего заявления о том, что ваш учитель сказал вам, что что-то не так с вашим использованием getline
:
Вы были полностью оправданы своим замешательством.Если ваш «синтаксис getline неверен», вы получите ошибку компиляции.Поскольку в вашем вопросе не упоминались какие-либо ошибки компиляции, даже до исследования и определения фактической проблемы можно было разумно заключить, что: 1) синтаксис getline был правильным, 2) программа скомпилирована и 3) вам нужно найти лучшийучитель, если ты намерен на самом деле выучить C ++ без помех со стороны плохих инструкторов.
Судя по всему, твоя проблема не имеет ничего общего с getline.Ваш учитель был просто некомпетентен и мало что знает о C ++.Конечно, это не ваша вина, но вы должны это понимать.
PS:
while(!infile.eof() || !exit)
Это небольшая ошибка .В этом случае ошибка скрыта, потому что в конечном итоге exit
будет корректно установлено с вашим вводным примером, но вы должны исправить это после прочтения и понимания объяснения, приведенного по этой ссылке.