所以,这就是我想要它去:
我想我的程序要问多少个号码,用户将输入(例如5)。输入数字后,我希望程序输出这些数字(2,3,20,40,50例如)。
很简单吧?嗯,我已经得到了我的代码有问题:即使我输入10个或200号码,我会输入,程序不断在第6号停车量和输出只有6个号码。
int main()
{
int arraySize;
int array[arraySize];
cout << "How many numbers would you like to visualize?" << endl << "Numbers: ";
cin >> arraySize;
cout << "You will visualize " << arraySize << " numbers." << endl << "Begin: " << endl;
for (int i = 0; i < arraySize; i++) {
cin >> array[i];
}
cout << "You have inserted the following numbers: " << endl;
for (int a = 0; a < arraySize; a++) {
cout << array[a] << " ";
}
}
如果作为ARRAYSIZE我输入10,它会在6停止只是为了澄清,
这里:
int arraySize;
int array[arraySize];
是不是去上班。首先,可变长度数组是没有C ++的一部分,因此,如果编译器容忍但它仅编译。但另一个问题是,你正在做与arraySize
的大小的数组,但arraySize
未初始化。这是underfined behvaior - 任何可能发生,有没有保证。
您需要在所需arraySize
(与cin >> arraySize;
)读取之后,你需要让你的阵列。当你做到这一点,而不是VLA,尝试是这样的:
std::vector<int> array(arraySize);
如果你想确定数组的运行时的大小,你需要一个容器,适合于这一点。既然这个问题被标记为C ++,你应该使用一些标准库容器。
在你的情况,std::vector
是最好的:
#include <iostream>
#include <vector>
int main()
{
size_t arraySize = 0;
std::cout << "How many numbers would you like to visualize?\n"
<< "Numbers: ";
std::cin >> arraySize;
std::cout << "You will visualize " << arraySize << " numbers.\n"
<< "Begin: \n";
// declare std::vector and allocate memory for arraySize elements
std::vector<int> array(arraySize);
for (int i = 0; i < array.size(); i++) {
std::cin >> array[i];
}
std::cout << "You have inserted the following numbers: \n";
for (int a = 0; a < array.size(); a++) {
std::cout << array[a] << " ";
}
std::cout << std::endl;
}
想一想,用户仍然可以输入任何他喜欢的,例如,一个字符串。改善(和一个很好的做法)将是验证用户的输入。
通过使用自己定义int array[arraySize]
收到arraySize
作为用户输入并不能解决您的问题后一种方法。声明可变长度数组是无效的C ++。如果让更多的编译器警告,你会得到注意这一点。
例如,使用gcc 8.2.0旗-Wpedantic
给出如下:
warning: ISO C++ forbids variable length array 'array'