我在使用此阵列码的一个问题是应该输出的所有由用户分别输入之前的数字

问题描述 投票:0回答:2

所以,这就是我想要它去:

我想我的程序要问多少个号码,用户将输入(例如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停止只是为了澄清,

c++ arrays output
2个回答
3
投票

这里:

int arraySize;
int array[arraySize];

是不是去上班。首先,可变长度数组是没有C ++的一部分,因此,如果编译器容忍但它仅编译。但另一个问题是,你正在做与arraySize的大小的数组,但arraySize未初始化。这是underfined behvaior - 任何可能发生,有没有保证。

您需要在所需arraySize(与cin >> arraySize;)读取之后,你需要让你的阵列。当你做到这一点,而不是VLA,尝试是这样的:

std::vector<int> array(arraySize);

4
投票

如果你想确定数组的运行时的大小,你需要一个容器,适合于这一点。既然这个问题被标记为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'
© www.soinside.com 2019 - 2024. All rights reserved.