c ++尝试在函数中更改局部变量

时间:2018-04-13 01:10:45

标签: c++ function

即时学习功能,我一直试图从我的功能中调用我的最后一个总值(所以标记为&#34的总数;到目前为止总数为#34;),当进行for循环时(打印出36)当使用8作为测试号码时,在我的主要功能中再次打印36,在#34;你的总数是"

据我所知,它不打印36因为在函数中我将total视为局部变量而我认为我需要将其用作全局或静态但我不确定

当我试图让它成为一个静态的时候我不确定我做得对,我在定义它们时在我的总变量前面写了静态

#include <iostream>
using namespace std;

int sum(int count);

int main()
{
    int count;
    double num, total;

    cout << "Please enter a number: ";
    cin >> num;

    for (count = 1; count <=num;  count = count + 1)
    {
        sum(count);
    }

    cout << "Your total is: " << total << endl;
    return 0;
}

int sum(int count)
{
    double total;
    total = total + count;
    cout << "Current number: " << count << endl;
    cout << "Total so far: " << total << endl;
}

2 个答案:

答案 0 :(得分:3)

totalmain()sum()中未初始化,因此您获得的任何结果都是不确定的。

事实上,total内的sum()位于sum()的本地,而total中的main()位于main()的本地。对sum()所做的任何更改total都不会影响total中的main()

您应该将sum()更改为totalmain()作为指针/引用传递的输入参数,以便sum()可以修改其值:

#include <iostream>

using namespace std;

void sum(double &total, int count);

int main()
{
    int count, num;
    double total = 0.0;

    cout << "Please enter a number: ";
    cin >> num;

    for (count = 1; count <= num; ++count)
    {
        sum(total, count);
    }

    cout << "Your total is: " << total << endl;
    return 0;
}

void sum(double &total, int count)
{
    total += count;
    cout << "Current number: " << count << endl;
    cout << "Total so far: " << total << endl;
}

Live Demo

答案 1 :(得分:1)

total中的{p> main()total中的sum()是不同的变量,因为它们具有不同的块范围。

int sum(int count) {
   // such a silly pass-through implementation if you want to calculate "total"
   // do something with count
   return count;
}
// in main
double total = 0;
total += sum(count);