2

多言語をサポートするプログラムを構築したいのですが、メイン関数に言語選択コードを含めると面倒なので、languageという別の関数を作成して、以下のコードを書きました。

#include <iostream>

int language() {
std::cout << "1.English\n2.中文";
}

int main() {
    std::cout << language();
}

その後、Code::Blocks IDE から警告が表示されました。

*warning: no return statement in function returning non-void [-Wreturn-type]|*

コマンド プロンプトから MinGW を使用してコードをコンパイルすることはできますが、コンパイルされたプログラムの出力は次のとおりです。

1.English
2.中文4683872

次に、 return 0;を追加します。std::cout << "1.English\n2.中文";の後 ただし、上記の 4683872 の代わりに 0 が表示されます。

私はまだ C++ を学んでいますが、自分のコードに何が起こったのかわかりません。これらの数値を削除する方法はありますか?

4

6 に答える 6

3

プログラムでは、最初に文字列を出力し、関数の戻り値を出力した後に...文字列の後に数字があるのはそのためです。

ちょうど試して :

// I don't think your language function need to return something
// So make it void
void language() {
    std::cout << "1.English\n2.中文";
}

int main() {
    language(); // Here no need to print the value returned by the language function
    return 0;   // Main return an int, 0 is for success
}

もう少し説明するために:

language()関数がint値を返し、何も返さないという事実は、未定義の動作につながります。そのため、 のような値が得られます4683872。また、コンパイル時に警告が表示されるのもそのためです。

于 2013-08-13T10:02:46.690 に答える
2

コードには 2 つの問題があります。1 つ目は、 をlanguage返すと宣言しているintが、実際には何も返さないことです。これが警告の内容です。もう 1 つの問題は最初の問題に基づいており、この「戻り値」が存在しないにもかかわらず実際に使用すると、未定義の動作が発生します。

これは 2 つの方法で解決できます。関数から有効な値を返すか、戻り値として宣言voidし、式で関数を使用しないでください。

于 2013-08-13T10:03:14.783 に答える
1

ユーザーに言語を選択させたい場合は、コードを次のようにする必要があります。

#include <iostream>

int language() {
    int choice;

    std::cout << "1.English\n2.中文";  // print menu of language choices
    std::cin >> choice;               // get selection from user
    // NB: real code would have error checking here to make sure that `choice` is valid
    return choice;                    // return selection
}

int main() {
    std::cout << language();
}
于 2013-08-13T10:02:16.200 に答える
0
    #include <iostream>

    void language() {
    std::cout << "1.English\n2.中文";
    }

    int main() {
        language();
        return 0;
    }
于 2013-08-13T10:01:57.317 に答える