У меня проблема с этим кодом массива, который должен выводить все числа, которые были введены ранее пользователем - PullRequest
0 голосов
/ 06 февраля 2019

Итак, вот как я хочу это сделать:

Я хочу, чтобы моя программа спросила, сколько цифр введет пользователь (например, 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] << " ";
    }
}

Если я введу 10 как arraySize, он остановится на 6. Просто чтобы уточнить,

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Если вы хотите определить размер массива во время выполнения , вам нужен контейнер, подходящий для этого.Поскольку этот вопрос помечен 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'
0 голосов
/ 06 февраля 2019

Это здесь:

int arraySize;
int array[arraySize];

Не собирается работать.Во-первых, массивы переменной длины не являются частью C ++, поэтому он компилируется только в том случае, если компилятор все же это допускает.Но другая проблема заключается в том, что вы создаете массив размером arraySize, но arraySize не инициализируется.Это недопустимый бехваир - все может случиться, и нет никакой гарантии.

Вам нужно прочитать в желаемых arraySizecin >> arraySize;) и после , что вам нужно сделать свой массив,И когда вы делаете это, вместо VLA, попробуйте что-то вроде этого:

std::vector<int> array(arraySize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...