【发布时间】:2021-11-18 05:29:36
【问题描述】:
我正在学习 C++,并且有一个要求取两个数字并将它们插入数组的作业。第一个数字是基数,第二个数字是数组长度。数组的长度是底数乘以指数的次数。
例如,如果基数为 2,数组长度为 4,则元素 0 为 1,元素 2 为 2,以此类推,输出为 2、4、8、16。
这很有效,直到输入任何基数,然后是 5。如果长度为 5 或更大,我会正确获得前四个元素,那么后面的所有元素都是 0。
这是我想出的代码,但没有按预期工作。
#include <iostream>
using namespace std;
int main() {
int power, powarray[power];
double base;
while(power >= 0) {
cout << "Please enter a base number.\n";
cin >> base;
cout << "Please enter your exponent.\n";
cin >> power;
if (power <= 0) {
cout << "Please enter a nonnzero power\n";
} else if (power > 0) {
for(int n = 0; n < power; n++) {
//powarray[0] = base;
powarray[n] = base * powarray[n-1];
cout << powarray[n] << endl;
}
}
}
return 0;
}
【问题讨论】:
-
几个原因,powarray[power] 仅当 power 为常数时才是标准 C++。可变长度数组最好使用 std::vector 初始化。而且你没有用值初始化数组(C++不会自动用0初始化变量)
-
要在 C++ 中使用变量,您需要声明并初始化该变量的默认值。未经初始化声明的变量可以分配任意值。你只是声明power而不初始化它,所以你第一次使用它
数组长度可以是任意的,在其他机器上,它可能是5、7,无效... -
int power, powarray[power];这在很多层面上都是错误的:VLA 在 C++ 中无效,power在使用时未初始化