用于輸出用戶給定區間已經給定個數的亂數
代碼有什么可以改進的地方 ?
代碼如下 :
#include<random>
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
using std::uniform_int_distribution;
using std::default_random_engine;
// *p:最小值 *(p+1):最大值 *(p+2):輸出亂數個數
int* p = new int[3]; //為*p分配動態記憶體
//自定義函式 換行
void newLine();
bool checkIsOver();
void setNum(int* p);
void getRandNum(int* p);
int main() {
bool IsOver = true; //用于判斷程式是否結束
cout << "提示:亂數范圍為閉區間" << endl;
while (IsOver) { //IsOver判斷是否結束
setNum(p);
newLine();
getRandNum(p);
newLine();
IsOver = checkIsOver(); //將值返還給IsOver判斷符
}
cout << "程式已退出.." << endl;
delete[] p; //釋放動態記憶體
return 0;
}
//換行
void newLine() {
cout << endl;
}
//判斷程式是否結束
bool checkIsOver() {
char temp;
newLine();
cout << "是否繼續輸入?(是:y,否:n):";
for (;;) {
cin >> temp;
if (temp == 'y')
return true;
else if (temp == 'n')
return false;
else
cout << "輸入資料有誤!請重新輸入:";
}
}
//按用戶要求輸出亂數
void getRandNum(int* p) {
static uniform_int_distribution<int> u(*p, *(p + 1)); //括號內為范圍 為閉區間
static default_random_engine e;
for (int i = 1; i <= *(p + 2); i++) { //i為偽亂數個數
cout << u(e) << "\t";
if (i % 8 == 0) //每8個數換行
cout << endl << endl;
}
}
//記錄用戶輸入最小值及最大值
void setNum(int* p) {
for (;;) {
cout << "輸入最小值:";
cin >> *p;
cout << "輸入最大值:";
cin >> *(p + 1);
if (*p <= *(p + 1))
break;
else
cout << "輸入資料有誤!請重新輸入!" << endl;
}
cout << "輸入輸出亂數個數:";
cin >> *(p + 2);
}
uj5u.com熱心網友回復:
引數命名實在槽點太多...全域變數 p
IsOver 為 false 的時候表示 over,checkIsOver 的回傳值與 IsOver 的作用相悖
for 回圈不從0開始,你第一行不是只有7個數?
y/n 只支持小寫
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278989.html
標籤:C++ 語言
上一篇:各位編程大神幫幫忙
