通过引用调用和ostream和字符串操作递归

时间:2015-11-05 04:34:23

标签: c++ recursion reference overflow call

一切! 我试图让我的程序正常工作,我不认为它应该是递归的程序应该在文本文件中打印某些字符串并将它们放在一个文本框中。 但是,我错误地修改它并制作了一个无限循环(它实际上是一个堆栈溢出,哈哈,多么有趣......)。任何帮助将非常感激。 这是原型的代码(是的#include使用):

void textBox(ostream & out, string text);

以及主要功能和子程序中的部分:

cout << "Part c: textBox(text)" << endl ;
    cout << "---------------------" << endl ;
    ofstream fout("myFile.txt");
    string box = "Text in a Box!";
    textBox(fout, box);

    fout << endl;
string size = "You can put any text in any size box you want!!";
textBox(fout,size);

fout << endl;
string courage = "What makes the muskrat guard his musk? Courage!";
textBox(fout,courage);

void textBox(ostream & out, string text)
{
    // ---------------------------------------------------------------------
    //  This routine outputs text surrounded by a box.
    // ---------------------------------------------------------------------

    ofstream myFile("myFile.txt");
    textBox(cout, "Message to screen");
    textBox(myFile, "Message to file");
    int textSize = text.size();

    out << '+' << setfill('-') << setw(textSize+1) << right << '+' << endl;
    out << '|' << text << '|' << endl;
    out << '+' << setfill('-') << setw(textSize+1) << right << '+' << endl;

    out << setfill(' ') ;       
}

1 个答案:

答案 0 :(得分:0)

这是递归的,因为textBox会调用自己。如果您:

,您的程序将会运行

A)删除textBox

中对textBox的所有来电

或B)像这样textBox

void textBox(ostream & out, string text)
{
    int const textSize = text.size() + 1;

    out << '+' << setfill('-') << setw(textSize) << right << '+' << endl;
    out << '|' << text << '|' << endl;
    out << '+' << setfill('-') << setw(textSize) << right << '+' << endl;

    out << setfill(' ') ;
}

并创建另一个功能:

void textBoxWithInfo(ostream & out, string text)
{
    textBox(cout, "Message to screen");

    { // Braces to deallocate + close myFile faster
        ofstream myFile("myFile.txt");
        textBox(myFile, "Message to file");
    }

    textBox(out, text);
}

并在main中调用上述功能。