C++ 无法删除输出后的随机数

C++ 无法删除输出后的随机数,c++,C++,我想构建一个支持多语言的程序,但如果我将语言选择代码包含在主函数中,它会很混乱,因此我创建了另一个名为language的函数,然后我编写了以下代码: #include <iostream> int language() { std::cout << "1.English\n2.中文"; } int main() { std::cout << language(); } 我仍然可以通过命令提示符使用MinGW编译代码,但编译后的程序给了我以下输出:

我想构建一个支持多语言的程序,但如果我将语言选择代码包含在主函数中,它会很混乱,因此我创建了另一个名为language的函数,然后我编写了以下代码:

#include <iostream>

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

int main() {
    std::cout << language();
}
我仍然可以通过命令提示符使用MinGW编译代码,但编译后的程序给了我以下输出:

1.English
2.中文4683872

然后我加上返回0;在std::cout之后,std::cout如果您希望用户选择一种语言,那么您的代码需要更像这样:

#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();
}

在程序中,首先打印字符串,然后打印函数的返回值。。。这就是为什么字符串后面有一个数字

试试看:

// 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
}
再解释一下:


语言函数返回一个int值,而不返回任何内容,这一事实导致了未定义的行为。这就是为什么会得到4683872这样的值。这也是编译时出现警告的原因。

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


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

您必须对返回值进行排序!您希望语言函数返回一个输出流,因为您正在将它的输出输入main中的std::out。您还可以将一个输出流传递到语言中,这样就可以将它与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;
}

谢谢这对我来说确实有效,但在接受另一个答案之前,我似乎有一个时间限制。我稍后会接受你的回答。真正的问题是什么?他问了一个问题[原文如此]有没有办法删除。。。?;我回答了。我甚至简要地解释了他为什么看到了他所看到的。我觉得错误检查在这个阶段可能不合适,因为OP显然是在C++学习曲线的早期阶段。这正是教错误检查应该从地上包括在内的时候。否则你可能会冒着创建另一个危险的无能程序员的风险。说句公道话,但是对于一个刚刚掌握cin和cout的诀窍,甚至可能还没有掌握条件句等的人来说,这可能太快了。不过我会补充一点,我还有一个问题。如果用户输入的是随机字符而不是指定字符,那么如何返回到指定的部分而不是结束程序?@ngbeslhang:发布一个新问题。如果你要走这条路,你为什么要这样做,真的吗?至少要遵循I/O操纵器的约定,它不会在调用站点将流作为输入,这在词汇上是冗余的。是的,如果语言不使用args,只返回std::string会更好
// 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
}
#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;
}