0

ファイルがあり、その内容を印刷したいのですが、コンパイラが次を認識しません:"/。\____ \\_-。"//"/ / __-/ __\ _ \ _ \ \ "" \ / \_ \。/ _ _ _ // // "" // _ / \ \ _ \ \- __ 「」 _ \ __ /-/ \"" \-。\\ \ / __/。""\ \ _ \\-。\ _ ""-\ _ __\ _ \ `__ \ _ \""。/ ___// / / // _ / "

これが私のコードです:

int main()
{
  MenuText text;
  string test = "Champion";
  ofstream output("File.txt");
  text.save(output);
  fstream output ("File.txt");
  text.load("File.txt");//This is an error.
  text.print();


MenuText::MenuText()
{
    mText = "Default";

}
MenuText :: MenuText(string text)
{
mText = text;
}
void MenuText::print()
{
cout<< "Story= " << mText<< endl;
cout<< endl;
}
void MenuText::save(ofstream& outFile)
{
outFile<<   "/         .   \  \____    \\   \\    _ -. "
            //"/    /__        -    \/\_______\\__\\__\ \"
            "__\  /\   __   \     .      \/_______//__//"
            "__/\/__/ \  \   \_\  \       -   ________  "
            "___    ___  ______  \  \_____/     -  /\    "
            "__    \\   -.\    \\   ___\ \/_____/    ."
            "\  \  \__\   \\   \-.      \\   __\_        "
            "-   \ _\_______\\__\  `\___\\_____\           "
            ".     \/_______//__/    /___//_____/ "<< mText<< endl;
cout<< endl;
outFile<< endl;
}
void MenuText::load(ifstream& inFile)
{
string garbage;
inFile>> garbage >> mText;
}
4

4 に答える 4

2

\asの発生を回避する必要があります\\。それらのうちの2つが必要な場合は、両方をエスケープする必要があります- \\\\

また、2行目はコメントアウトされていることに注意してください。

//"/    /__        -    \/\_______\\__\\__\ \"

どうですか:

        "/         .   \\  \\____    \\\\   \\\\    _ -. "
        "/    /__        -    \\/\\_______\\\\__\\\\__\\ \\"
        "__\\  /\\   __   \\     .      \\/_______//__//"
        "__/\\/__/ \\  \\   \\_\\  \\       -   ________  "
        "___    ___  ______  \\  \\_____/     -  /\\    "
        "__    \\\\   -.\\    \\\\   ___\\ \\/_____/    ."
        "\\  \\  \\__\\   \\\\   \\-.      \\\\   __\\_        "
        "-   \\ _\\_______\\\\__\\  `\\___\\\\_____\\           "
        ".     \\/_______//__/    /___//_____/ ";
于 2012-09-24T11:24:04.380 に答える
1

\リテラル文字列のエスケープ文字です。バックスラッシュを表す場合は、発生するたびに2回適用する必要があります。

\ => \\
\\ => \\\\

"リテラル文字列内の文字もエスケープする必要があります\"

于 2012-09-24T11:24:51.323 に答える
1

コンパイラーは、任意の\<any_symbol>ペアを制御文字として扱います。たとえば\n、改行であり、\t表形式です。したがって、バックスラッシュを使用するたびに、コンパイラはバックスラッシュを解釈しようとし、次の記号を制御文字として解釈します。

これを回避するには、各円記号を別の円記号でエスケープする必要があるため、を使用するたびに\、をに置き換える必要があります\\。もちろん、複数の円記号を使用する場合は、それらすべてをエスケープする必要があります。

于 2012-09-24T11:27:08.727 に答える
0

おそらく、「認識しない」とは、「一部の文字を置き換える」という行に沿った何かを意味するか、不正なエスケープシーケンスについて不平を言います。バックスラッシュ\は特定の特殊文字のプレフィックスです。としてエスケープする必要はなく\\、C ++ 2011では、生の文字列を使用することもできます。たとえば、"\\"abdR"(\)"は両方とも単一の円記号を生成する必要があります。

于 2012-09-24T11:31:23.550 に答える