C++ std::cin功能未按预期运行?

C++ std::cin功能未按预期运行?,c++,C++,我创建了一个函数,它接受一个消息字符串和一个输入值(主要是一个整数,至少在本例中是这样),因此我可以打印一条消息并在单个函数中接受输入,而不是两行代码。以下是片段: main.h void input(std::string msg, int choice) { std::cout << msg; std::cin >> choice; } 当涉及到具有预期结果的代码段时,my switch case函数会正确地将输入(在本例中是初始_选择)检测为有效整

我创建了一个函数,它接受一个消息字符串和一个输入值(主要是一个整数,至少在本例中是这样),因此我可以打印一条消息并在单个函数中接受输入,而不是两行代码。以下是片段:

main.h

void input(std::string msg, int choice) {
    std::cout << msg;
    std::cin >> choice;
}
当涉及到具有预期结果的代码段时,my switch case函数会正确地将输入(在本例中是初始_选择)检测为有效整数。例如,输入1、2或3将适用于案例1:、案例2:、案例3:。但是,具有意外结果的代码段不会在我的switch case函数中检测到三个有效数字中的任何一个,而是在默认情况下运行代码。非常感谢您的帮助,谢谢


注意:我对编码是新手,如果它不是正确的代码,请不要感到惊讶。

这与cincout、switch语句等无关

正如user202729所指出的,传递函数参数很简单

C++不是Fortran III;默认情况下,函数的参数是通过值传递的,而不是通过引用传递的。这意味着,如果在函数中更改其一个参数的值,则此更改仅在函数中有效;更改不会反映给调用方

因此,您的
std::cin>>选择
语句工作得非常好,它将用户输入的值存储在
选项中。但是,一旦函数结束,该值将永远不存在,并且永远不会反映回调用者,在本例中,调用者是
main()
方法的
initial\u选项
变量

要解决此问题,您有两个选项:

  • 通过引用传递变量,以便函数可以修改它
  • 根本不要传递变量;相反,让函数返回值;这通常就是函数的用途

  • 这与
    cin
    cout
    、switch语句等无关

    正如user202729所指出的,传递函数参数很简单

    C++不是Fortran III;默认情况下,函数的参数是通过值传递的,而不是通过引用传递的。这意味着,如果在函数中更改其一个参数的值,则此更改仅在函数中有效;更改不会反映给调用方

    因此,您的
    std::cin>>选择
    语句工作得非常好,它将用户输入的值存储在
    选项中。但是,一旦函数结束,该值将永远不存在,并且永远不会反映回调用者,在本例中,调用者是
    main()
    方法的
    initial\u选项
    变量

    要解决此问题,您有两个选项:

  • 通过引用传递变量,以便函数可以修改它
  • 根本不要传递变量;相反,让函数返回值;这通常就是函数的用途

  • 您应该阅读C++中的传递值和传递引用。是的,用户实际上是谢谢您。我有点困惑,为什么把输入作为参考会改变它。你能给我一个解释吗?当你把一个变量作为
    int choice
    传递时,编译器实际上会复制一个参数。因此,对
    选项的修改发生在副本上,而不是原件上。传递引用确保了所有对<代码>选择>代码>的引用影响了原件。您应该阅读C++中关于传递值和传递引用的内容。是的@ USE202029,它实际上感谢您。我有点困惑,为什么把输入作为参考会改变它。你能给我一个解释吗?当你把一个变量作为
    int choice
    传递时,编译器实际上会复制一个参数。因此,对
    选项的修改发生在副本上,而不是原件上。通过引用传递可确保对
    choice
    的所有引用都会影响原始文件。
    int initial_choice;
    std::cout << "Invalid input provided. Please try again: ";
    std::cin >> initial_choice;
    
    int initial_choice;
    input("Invalid input provided. Please try again: ", initial_choice);