2016-05-28 1 views
0

Итак, я пытаюсь создать базовую программу, я хочу создать вектор, называемый числами, и заполнить его 10 случайными числами между одной и сто. Это то, что у меня есть до сих пор;Вектор в C++, мой код работает, но не так, как я хочу?

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> numbers; 

    int in = rand() % 100 + 1; 

    for (int i = 0; i < in; i++) 
    { 

     int n = rand() % 100 + 1; 

     numbers.push_back(n); 

     cout << "Number is: " << numbers[i]; 

     system("pause"); 
     return 0; 
    } 
} 

Он выводит только одно число, и я ищу для вывода десяти случайных.

+0

PLS формат вашего кода с правильным отступом ... –

+2

установить 'in' в 10, а не произвольное число! –

ответ

2

Удалить следующую строку

system("pause"); 

Это will stop the continuation of your program. Также переместите свой return 0; в последний оператор в main, иначе он остановится только после первой итерации.

Кроме того, если вы хотите, чтобы генерировать 10 номера, а затем установить, что, как условие остановки ваш цикл в

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> numbers; 
    const int in = 10; // Generate 10 random numbers 

    for (int i = 0; i < in; i++) 
    { 
     int n = rand() % 100 + 1; 

     numbers.push_back(n); 

     std::cout << "Number is: " << numbers[i] << std::endl; 
    } 

    return 0; // now you may return since the loop is complete 
} 

Working demo

+2

@progressive_overload 'main' - это исключение: возврат не требуется –

1
#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    // Declare and define a vector holding ints 
    vector<int> numbers; 

    // Run loop 10 times, increase i by one every time it's finished 
    for (int i = 0; i < 10; i++) 
    { 
     // Generate a random number, get the last 3 digits, add one 
     int n = rand() % 100 + 1; 

     // Push that number back to the the vector 
     // Like adding the number to a list 
     numbers.push_back(n); 

     // Print the current number from inside the vector 
     // by using the counter/index i using an array-like syntax 
     cout << "Number is: " << numbers[i] << std::endl; 

    } 
    // This executes the command pause, after it has been terminated, 
    // stop the execution, with "success" by returning 0 
    system("pause"); 
    return 0; 
} 

Это, скорее всего, то, что вы ищете.

Однако имейте в виду, что использование вектора в этом случае создает небольшие накладные расходы. Я бы просто напечатал n вместо того, чтобы нажимать число на вектор, чтобы получить его потом. Но поскольку это, вероятно, просто подготовка к более продвинутому использованию векторов, это должно быть хорошо.

Выход:

Number is: 84 
Number is: 87 
Number is: 78                                              
Number is: 16                                              
Number is: 94                                              
Number is: 36                                              
Number is: 87                                              
Number is: 93                                              
Number is: 50                                              
Number is: 22  
+0

Спасибо, любезно признательны, что вы нашли время, чтобы помочь! –

0

В C и C++, случайным образом использует семена, чтобы генерировать выходной сигнал, на самом деле, если вы не засеваете случайное, случайное будет генерировать одно и то же число раз и снова.

Вы можете -И SHOULD- семя его с отметкой времени

#include"time.h" 
srand(time(0)); 

после этого, случайное будет генерировать «истинные» случайные числа.

ТАКЖЕ, вы должны удалить эти две строки:

system("pause"); 
    return 0; 

Он ломает свой цикл в первой итерации

+1

Хороший комментарий, не отвечает на вопрос –

+0

Цените помощь, спасибо! –

+0

true, я удалил последнюю часть во время публикации, извините, отредактировал ... – PRDeving

0

return 0 внутри цикла приведет к остановке после первой итерации. return не имеет смысла для любого цикла в C, этот оператор используется для завершения функции.

Возможно, вы сразу увидите это, если код был правильно отступом. Отступы.

Кроме того, вы не говорите ему, чтобы он проходил 10 раз, вы говорите ему о петле in раз, а in - rand() % 100 + 1.

+0

Теперь имеет смысл, спасибо! –

0

Вы должны поставить system ("pause") и return вне цикла, а не внутри:

... 
for() {...} 

system ("pause"); 
return 0; 
+1

Было бы намного полезнее, если бы вы могли дать некоторое объяснение в отношении кода, который вы написали. –

+0

Хорошо. Это немного запутанно. Лемме отредактируйте ответ, затем –

0

Следующая идея была полезна для меня ...

//Initialize in ctor 
std::vector<int> vecI; 
for (int i=0; i<100; ++i) vecI.push_back(i); 

time_t seed = std::chrono::system_clock::now().time_since_epoch().count(); 

std::shuffle(vecI.begin(), vecI.end(), std::default_random_engine(seed)); 

// in ctor, ok to display for debug, or disable for release 
if(debugEnabled) { 
    for (int i=0; i<100; ++i) 
     std::cout << vecI[i] << " "; // 
std::cout << "\n" << std::endl; 
} 

В приложении вы получаете постоянный доступ к случайным значениям времени.

// easy to use in application 
for (int i=0; i<10; ++i) 
    testWith (vecI[i]); // ten selections from values in range 0..99 


// easy to test with all in-range values, in shuffled order 
for (int i=0; i<100; ++i) 
    testWith (vecI[i]); // all values in shuffled order 


// test with all in-range values, in order 
for (int i=0; i<100; ++i) 
    testWith (i); // all values in order 
Смежные вопросы