我正在尝试用C++构建Bulls&Cows游戏.我已经实现了大部分逻辑.游戏使用无限循环连续运行,并在每次运行时生成随机值.
我现在要做的是现在是输入用户输入并在输入有效时运行代码(只能是4位整数).这是我的实施:
#include ...
using namespace std;
vector<int> getDigits(int modelValue) {
vector<int> vectorValue;
int extractedDigit = 0;
int modulant = 10000;
int divisor = 1000;
for (int i = 0; i < 4; i++) {
extractedDigit = (modelValue % modulant) / divisor;
vectorValue.push_back(extractedDigit);
modulant /= 10;
divisor /= 10;
}return vectorValue;
}
int main() {
for (;;) {
int model = rand() % 9000 + 1000;
int guess = 0000;
int bulls = 0;
int cows = 0;
int counter = 1;
cout << "This is the random 4-digit integer: " << model << endl;
cout << "Enter a value to guess: ";
cin >> guess;
if ((guess >= 1000) && (guess <= 9999) && (cin)) {
vector<int> modelVector = getDigits(model);
vector<int> guessVector = getDigits(guess);
for (int i = 0; i < 4; i++) {
if (find(modelVector.begin(), modelVector.end(), guessVector[i]) != modelVector.end()) {
if (modelVector[i] == guessVector[i]) { bulls += 1; }
else { cows += 1; }
}
}cout << "There are " << bulls << " bulls and " << cows << " cows" << endl;
}
else {
cout << "Please enter a valid 4-digit integer between 0000 and 9999" << endl;
cin.clear();
}
}return 0;
}
Run Code Online (Sandbox Code Playgroud)
您读取用户输入的方式没有任何问题,只是在将值分配给“猜测”变量之前不检查输入类型。
因此,如果用户输入整数类型不接受的任何值,则会导致应用程序崩溃,从而生成无限循环。
为了保护您的整数变量免受错误的用户输入的影响,您必须替换直接输入分配:
cin >> guess;
Run Code Online (Sandbox Code Playgroud)
通过受保护的:
while(!(cin >> guess) || (guess < 1000)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Please, try again: ";
}
Run Code Online (Sandbox Code Playgroud)
在上面的while中,您可以看到“numeric_limits::max()”,其解释如下:
返回数字类型 T 可表示的最大有限值。对于所有有界类型都有意义。
最后,当用户的输入低于 1000(根据请求)或者不是有效整数时,您需要一段时间将用户置于此读取循环中。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |