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.中文" 之后;但它显示 0 而不是上面的 4683872。

我仍在学习 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

您的代码中有两个问题:第一个是您声明language返回 anint但实际上没有返回任何内容。这就是警告的内容。另一个问题基于第一个问题,即使没有,您实际上也使用了这个“返回值”,这会导致未定义的行为。

您可以通过两种方式解决它:从函数返回一个有效值,或者将其声明为返回void并且不在表达式中使用该函数。

于 2013-08-13T10:03:14.783 回答
1

您必须整理好您的返回值!您希望该language函数返回一个输出流,因为您将它的输出输入std::outin main。您不妨将输出流传入到language,以便您可以将其与不同的输出流重用到std::out. 此外,main必须返回一个int. 标准做法是返回0,除非出现错误。

#include <iostream>

std::ostream& language(std::ostream& os) {
    os << "1.English\n2.中文"; 
    return os;
}

int main() {
    std::cout << language(std::cout) << std::endl;
    return 0;
}
于 2013-08-13T10:20:54.510 回答
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 回答
0

正在为您打印一个整数,std::cout << language();因为language()返回一个int. 如果您不想在文本之后打印任何内容,请std::cout <<删除main.

于 2013-08-13T10:00:32.913 回答