2017-12-18 36 views
-2

여섯 자리 숫자를 생성해야하는 함수에 문제가 있습니다.C++에서 여섯 자리 숫자 생성

void generateNumbers(int &len, int arr[]) { 
    srand(time(0)); 

    cout << "How many numbers to generate: "; 
    cin >> len; 

    if (len <= 0 || len > 100) { 
     cout << "\n Chose number between 1 - 100\n"; 
     generateNumbers(len, arr); 
    } else { 
     cout << "\n\nThe numbers: \n"; 

     for (int i = 0; i < len; i++) { 
      arr[i] = (rand() % 999999) + 100000; 
      cout << endl << arr[i]; 

     } 
    } 
} 

내가 999999 + 100000 잘못 랜드() %를 pobably 알고 : 프로그램이 번호를 생성하지만, 그들은 항상 1 Six digit numbers

로 시작하고 문제를 만드는 부분 이잖아 것 같다 그러나 나는 differend 방법을 시도하고 그들 중 누구도 일하지 않았다. 미리 감사드립니다!

+1

당신은'랜드 인한 필요를 900,000 + 100000' –

+1

는 000000 여섯 자리 숫자입니다 ? 아니면 처음 6 자리 숫자가 100000입니까? 후자의 경우 0에서 899999 사이의 난수가 필요하고 그 오프셋을 추가하십시오. –

+0

@MartinBonner 틀린 점은 그것이 포함되어 있다는 사실 때문에 '900000'입니다 –

답변

0

방정식 rand() % 900000 + 100000은 올바른 값을 제공하지만 rand is considered harmful입니다.

대신 vectormt19937을 사용하는 것이 좋습니다. 당신은 당신이 할 수있는 당신이 len에서 찾고있는 수를 캡처 한 것을 감안할 때 :() %

vector<int> arr(len); 

generate(begin(arr), end(arr), [g = std::mt19937{std::random_device{}()}]() mutable { return g() % 900000 + 100000; }); 

Live Example