难以理解为什么返回值不会更新值

时间:2019-11-11 14:51:41

标签: c++ visual-studio

我正在尝试编写一个简单的程序,该程序只需几分钟即可输入,然后通过一个函数将该输入转换为秒,然后返回更新后的值。

我试图进行调试并跟踪值,但是一切似乎都在进行。问题是当我在控制台中运行程序时。

#include <iostream>
using namespace std;

int convert(int minutes);

int main() {
    //obj: write a function that takes in integer minutes and converts to secs

    // inital values
    int min = 0;

    //only allow correct input
    do {

        cout << "\t\nPlease enter a number of minutes: ";
        cin >> min;
    } while (min < 0);

    cout << "\t\nYou entered " << min << " minutes";

    //conversion
    convert(min);

    cout << ", and that is " << min << " in seconds.\n";

    system("PAUSE");
    return 0;
}

int convert(int minutes) {
    return minutes * 60;
}

例如,用户输入5。convert(5)

我希望能获得300,但是当下一个指令运行时,我会得到:

“您输入了5分钟,即5秒钟。”

编辑:谢谢您的帮助。我想去上学之前自学C ++(应对这些编程挑战),而且非常新。

#include <iostream>
using namespace std;

int convert_Min_to_Secs(int& minutes);

int main() {
    //obj: write a function that takes in integer minutes and converts to secs

    // inital values
    int min = 0;

    //only allow correct input
    do {

        cout << "\t\nPlease enter a number of minutes: ";
        cin >> min;
    } while (min < 0);

    cout << "\t\nYou entered " << min << " minutes";

    //conversion
    int sec = convert_Min_to_Secs(min);

    cout << ", and that is " << sec << " in seconds.\n";

    system("PAUSE");
    return 0;
}

int convert_Min_to_Secs(int& minutes) {
    return minutes * 60;
}

将代码与您的建议固定在一起,但我想理解。当我初始化原始int min = 0时。然后我允许用户输入“ 2”。 然后min里面有'4'。

当它通过convert函数传递时,它是否在convert内又增加了一个分钟?或确切发生了什么。

2 个答案:

答案 0 :(得分:0)

您正在按值传递增量:

int convert(int minutes)

因此minutes被复制,然后您return一个值:

return minutes * 60;

因此没有任何变化,并且新值丢失了:

convert(min);

如果您想更改minutes,则可以通过引用传递:

void convert(int& minutes)
{
   minutes *= 60;
}

然后:

convert(min);

实际上将min更改为新值。但这相当令人费解和困惑。

因此,最好将convert保持原样:

int convert(int minutes)
{
    return minutes * 60;
}

并分配新值:

int sec = convert(min);

cout << ", and that is " << sec << " in seconds.\n";

答案 1 :(得分:0)

简单地说,您忘记将返回值分配给要打印的新变量...