3

わかりましたので、私自身がかなり興味深いと思うことをしたいと思います..関数にオプションの引数が必要で、この引数は2つのことを行います。1. テキストをコンソールに出力するか、ファイルに出力するかを決定する 2. ファイルに出力する場合はファイルに出力し、そうでない場合はコンソールに出力する

非常に効率的なコードが必要なので、同じ関数に入れたいです。これは私がそれを解決しようとした方法ですが、明らかにうまくいきません

void Maze::Print_maze(std::string file = "no!ne") const{
    if (file != "no!ne")
        std::ofstream outfile(file);
    for (int i = 0; i < Map.size(); i++)
    {
        for (int j = 0; j < Map[i].size(); j++)
        {
            if (file == "no!ne")
                std::cout << Map[i][j];
            else
                outfile << Map[i][j];
        }
        if (file == "no!ne")
            std::cout << std::endl;
        else
            outfile << std::endl;
    }
}

好奇心旺盛な人のために..コードは私が取り組んでいる迷路プロジェクトからのもので、ランダム化された迷路を生成して解決しています。また、ファイルから迷路を読み取って解決する可能性もあります。あとはファイルに出力するだけです。しかし、前述のように、2 つの関数を作成するのではなく、通常のコンソールへの出力とファイルへの出力をマージしたいと考えています。私はどのように疑問に思っています..それは可能ですか?私の「Map[][]」はvector <vector<char> >

4

4 に答える 4

0

みんなありがとう、私はあなたの返信を読みました。あなたが私を助けるためにしてくれたすべての良いコメントと努力に感謝しています. 私は解決策にたどり着きました。これが私の問題に対する最善の解決策だと思います。また、エラー管理を少し追加しました

void Maze::Print_maze(std::string file) const{
    std::ofstream outfile(file);
    // if file is open, write to file otherwise write to console
    std::ostream &out= (!outfile.is_open()? std::cout : outfile);
    // Check if file failed to open
    if(file != "" && (!outfile.is_open()))
        std::cerr << "File failed to open." << std::endl;
    for (int i = 0; i < Map.size(); i++)
    {
        for (int j = 0; j < Map[i].size(); j++)
        {
                out << Map[i][j];
        }
            out << std::endl;
    }
    if(outfile.is_open())
        outfile.close();
}

編集:これについて言及するのを忘れました..私のクラスの私の Maze.h ファイルは、この関数宣言で構成されています:

void Print_maze(std::string file = "") const;
于 2013-05-31T20:13:05.743 に答える