【C++】猜数字小游戏
写一个简单的C++程序,用于实现一个猜数字游戏。
要求:
生成一个1到100之间的随机数,并让玩家猜测这个数是什么。如果玩家的猜测不正确,程序会提示猜测过大或过小,直到玩家猜对为止。
要点:
-
_CRT_SECURE_NO_WARNINGS
是一个宏定义,用于在Visual Studio中禁用关于不安全函数的警告。这是因为在<iostream>
和<ctime>
中使用的某些函数,在更安全的版本(如_s
前缀的函数)可用,但在这里为了简单起见,使用了旧版本。 -
#include<ctime>
是为了使用time
函数,该函数用于获取当前系统时间,以作为随机数生成器的种子。 -
srand((unsigned int)time(NULL));
初始化随机数生成器。每次程序运行时,都会使用当前时间作为种子,这样每次生成的随机数序列就不同。 -
rand() % 100 + 1;
生成一个1到100之间的随机数。 -
程序使用
while (1)
创建一个无限循环,玩家每次猜测后,都会根据输入的值与随机数比较,给出相应的提示。 - 在读取输入之前,应该检查
cin
的状态,以确保输入有效。如果输入不是一个整数,cin
将进入错误状态,并且之后的输入将不会读取。 - 可以增加更多的用户交互,比如提示用户输入他们的猜测。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<ctime>
int main()
{
// 添加随机数种子,利用当前系统时间生成随机数,防止每次随机数都一样
srand((unsigned int)time(NULL));
// 1. 生成随机数
int num = rand() % 100 + 1;
//cout << num << endl; // 为了游戏公平性,不应该在这里输出随机数
int val = 0;
int attempts = 0;
cout << "猜一个1到100之间的数字:" << endl;
// 2. 玩家进行猜测
while (true)
{
cin >> val;
// 检查输入流的状态
if (cin.fail()) {
cin.clear(); // 清除错误标志
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
cout << "请输入一个有效的数字。" << endl;
continue;
}
attempts++;
// 3. 判断玩家的猜测
if (val > num) {
cout << "猜测过大,请再次尝试:" << endl;
}
else if (val < num) {
cout << "猜测过小,请再次尝试:" << endl;
}
else
{
cout << "恭喜你,猜对了!你总共猜测了 " << attempts << " 次。" << endl;
break;
}
}
return 0;
}