【发布时间】:2015-11-11 03:11:03
【问题描述】:
我在 main 方法上方定义了一些全局变量。当我尝试在使用这些变量时调用函数“fib()”时,得到的结果不正确。
当我将变量移动到函数的本地范围时,我得到了正确的结果。
为什么会这样?这是正确的代码:
using namespace std;
#include <iostream>
#include <vector>
vector <int> fibVals;
int fibInput;
int fib(int n);
int main()
{
cout << "Please enter 3 Fibonacci numbers you wish to find:: \n";
for(int i = 0; i < 3; i++)
{
cin >> fibInput;
fibVals.push_back(fibInput);
}
cout << "The values at those Fibonacci numbers are(in order)::\n";
for(int i = 0; i < 3; i++)
{
cout << fib( fibVals[i] ) << "\n";
}
return 0;
}
int fib(int n)
{
int sum = 0;
int fib1 = 1;
int fib2 = 0;
if (n == 0 || n == 1)
return n;
for(int i = 2; i <= n; i++)
{
sum = fib1 + fib2;
fib2 = fib1;
fib1 = sum;
}
return sum;
}
错误代码在main方法上面有“sum”、“fib1”、“fib2”三个变量。为什么这不起作用,但在函数内部声明变量呢?
编辑:下面是不正确的代码。请注意,唯一的区别是变量的位置。
using namespace std;
#include <iostream>
#include <vector>
vector <int> fibVals;
int fibInput;
int fib(int n);
int sum = 0;
int fib1 = 1;
int fib2 = 0;
int main()
{
cout << "Please enter 3 Fibonacci numbers you wish to find:: \n";
for(int i = 0; i < 3; i++)
{
cin >> fibInput;
fibVals.push_back(fibInput);
}
cout << "The values at those Fibonacci numbers are(in order)::\n";
for(int i = 0; i < 3; i++)
{
cout << fib( fibVals[i] ) << "\n";
}
return 0;
}
int fib(int n)
{
if (n == 0 || n == 1)
return n;
for(int i = 2; i <= n; i++)
{
sum = fib1 + fib2;
fib2 = fib1;
fib1 = sum;
}
return sum;
}
我理解范围的概念。我认为将这三个变量设为全局(在 main 之外)与将它们设为本地(在 fib() 内部)没有区别。
【问题讨论】:
-
“进入函数的本地作用域”是什么意思?
-
我们必须查看不起作用的代码才能知道原因。也许你没有正确初始化变量,谁知道呢。再次显示失败的代码。
-
请发表您的输入、输出和预期输出。
-
这将是一个很好的机会来 (a) 了解什么是全局变量,以及 (b) 学习如何使用调试器,这将很容易揭示问题所在。我很好奇是什么迫使你想在全球范围内宣布它们?你认为这意味着什么?
-
没有人会雇用任何认为这是个好主意的人!?!?
标签: c++ variables scope fibonacci