2016-04-27 2 views
0

Я новичок, так что это проблема начинающих. C++Динамический массив, если условие выполнено для последующего использования

Если выбор пользователя равен == 1, я хочу, чтобы программа создавала динамический массив размера, который пользователь должен решить. И этот массив впоследствии будет использоваться для дальнейших действий. Если выбор не равен 1, ничего не создавайте.

Что я пробовал:

int main() 
{ 

std::cin>>choice; 

if (choice==1) 
{ 
int * size = new int; 
std::cin >> *size ; 
double *array = new double[*size]; 
} 

return 0; 
} 

Однако, если я ставлю его как этот массив оленья кожа существовать вне «если». Как получить динамический массив, созданный для дальнейшего использования, если выбор пользователя равен 1, но только в этом случае? У меня кончились идеи.

+2

Вы не должны использовать 'new' в этой программе. Для размера используйте обычную переменную int, а не указатель. Для массива используйте 'std :: vector'. –

+0

Остановить использование указателей –

ответ

0

Поместите массив за рамки вашего заявления, если:

int main() 
{ 
    int choice; 
    std::cin>>choice; 
    double *array; 

    if (choice==1) 
    { 
     int * size = new int; 
     std::cin >> *size ; 
     array = new double[*size]; 
    } 

    return 0; 
} 

Однако, так как вы используете C++, рекомендуется использовать вместо vector.

0

Переместите объявления переменных за пределами блока, чтобы исправить свой исходный вопрос.

int main() 
{ 
    double *array = null; 

    std::cin>>choice; 

    if (choice==1) 
    { 
     int * size = new int; 
     std::cin >> *size ; 
     array = new double[*size]; 
    } 

    // at this point array is ether null or a pointer to a buffer 

    return 0; 
} 

Или, более усовершенствованный

int main() 
{ 
    double *array = null; 
    int choice; 

    std::cin>>choice; 

    if (choice==1) 
    { 
     std::cin >> choice ; 
     array = new double[choice]; 
    } 

    // at this point array is ether == null or a pointer to a buffer 

    delete[] array; <--- don't forget to delete it! 
    return 0; 
} 
0

Я бы скорее рекомендуем использовать зЬй :: вектор: это может быть легко изменен Кроме того, вам не нужно выделять память для указателя

int main() { 
    int * size; 
    std::cin>>choice; 
    std::vector<double> myvector; 
    if (choice==1) 
    { 
     std::cin >> *size ; 
     myvector.resize(*size); 
    } 
    return 0; 
} 

http://www.cplusplus.com/reference/vector/vector/resize/

при использовании C++ вы должны скорее используют контейнеры, такие как векторы, а не массивы. Контейнеры C++ поставляются с множеством очень полезных функций (размер только один из них).

http://www.cplusplus.com/reference/stl/

Я также настоятельно рекомендую проверить значение размера, прежде чем использовать его, как вы можете в конечном итоге с неожиданными результатами.

пример:

*size = 0; // init before the loop 
while (*size <= 0) 
{ 
    std::cin >> *size; 
    if (*size <= 0) // an error message can be appreciated 
    { 
     std::cout << "error on size value" << std::endl; 
    } 
} 
+0

Ваш код имеет неопределенное поведение, потому что вы разыскиваете 'size', пока он не инициализирован. – emlai

1
#include <iostream> 
#include <vector> 
using namespace std; 

auto main() 
    -> int 
{ 
    int choice; 
    cin >> choice; 

    vector<int> array; 
    if(choice == 1) 
    { 
     int size; 
     cin >> size; 
     array.resize(size); 
    } 

    // Here you can use array 
} 

Отказ от ответственности: код не проверяется компилятором.

Смежные вопросы