用C语言写这个程序 清数字游戏.程序产生一个四位随机整数,这个四位数各个数码均不相同,你能猜出这个数是多少吗? 规则如下: 1.如果你猜中一位数字但位置不正确,则显示一个- 2.如果你清中一位数字且位置也正确,则显示一个+ 如:假如原数为4689.你猜的数为3694.则显示--+ 3.你只有十次机会,努力吧少年 按任意键开始游戏: 输出的提示结果只能是+和- 输入的猜测数字不能超过4位也不能小于4位,否则就会提醒是不合格数字 当结束一场游戏后可以选择输入Y或N开始新的游戏,或者直接结束游戏 每输入一次就会提醒你还有多少次机会
时间: 2023-06-25 21:05:20 浏览: 134
C语言 猜数字游戏程序
以下是用C语言编写的清数字游戏程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_CHANCES 10
#define NUM_DIGITS 4
int get_input(int *digits);
void generate_number(int *digits);
int check_guess(int *guess, int *digits);
int main()
{
int digits[NUM_DIGITS];
int guess[NUM_DIGITS];
int i, j, chances;
char c;
srand(time(NULL));
do {
generate_number(digits);
chances = MAX_CHANCES;
printf("Welcome to Clear Number Game!\n");
printf("Guess a %d-digit number with no repeated digits.\n", NUM_DIGITS);
do {
printf("You have %d chances left. Enter your guess: ", chances);
if (!get_input(guess)) {
printf("Invalid guess! The number must be %d digits with no repeated digits.\n", NUM_DIGITS);
continue;
}
chances--;
switch (check_guess(guess, digits)) {
case NUM_DIGITS:
printf("You win!\n");
chances = 0;
break;
case -1:
printf("Invalid guess! The number must be %d digits with no repeated digits.\n", NUM_DIGITS);
chances++;
break;
default:
for (i = 0; i < NUM_DIGITS; i++) {
if (guess[i] == digits[i]) {
printf("+");
} else {
for (j = 0; j < NUM_DIGITS; j++) {
if (guess[i] == digits[j]) {
printf("-");
break;
}
}
}
}
printf("\n");
break;
}
} while (chances > 0);
printf("The answer was: ");
for (i = 0; i < NUM_DIGITS; i++) {
printf("%d", digits[i]);
}
printf("\n");
printf("Do you want to play again? (Y/N): ");
scanf(" %c", &c);
} while (c == 'Y' || c == 'y');
return 0;
}
int get_input(int *digits)
{
int num, i, j, k;
if (scanf("%d", &num) != 1) {
return 0;
}
for (i = NUM_DIGITS - 1; i >= 0 && num > 0; i--) {
digits[i] = num % 10;
num /= 10;
for (j = i + 1; j < NUM_DIGITS; j++) {
if (digits[i] == digits[j]) {
return -1;
}
}
}
if (num > 0 || i >= 0) {
return -1;
}
return 1;
}
void generate_number(int *digits)
{
int i, j, temp;
for (i = 0; i < NUM_DIGITS; i++) {
digits[i] = i + 1;
}
for (i = NUM_DIGITS - 1; i > 0; i--) {
j = rand() % (i + 1);
temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
int check_guess(int *guess, int *digits)
{
int i, j, count = 0;
for (i = 0; i < NUM_DIGITS; i++) {
if (guess[i] == digits[i]) {
count++;
} else {
for (j = 0; j < NUM_DIGITS; j++) {
if (guess[i] == digits[j]) {
break;
}
}
if (j == NUM_DIGITS) {
return -1;
}
}
}
return count;
}
```
程序流程如下:
1. 定义常量 `MAX_CHANCES` 表示最多猜测次数,`NUM_DIGITS` 表示数字位数。
2. 定义函数 `get_input` 读取用户输入的猜测数字,并将其转换成数组形式存储,返回值为 1 表示读取成功,为 -1 表示读取失败。
3. 定义函数 `generate_number` 生成一个随机的四位数,且每个数字不重复。
4. 定义函数 `check_guess` 检查用户猜测的数字是否与正确答案相同,返回值为 + 表示数字和位置都正确,为 - 表示数字正确但位置不正确,为 -1 表示数字有误。
5. 主函数中使用 `srand` 函数设置随机数种子。
6. 主函数中使用 `do-while` 循环进行游戏,直到用户选择结束游戏。
7. 在每轮游戏开始时,调用 `generate_number` 函数生成正确答案。
8. 在每轮游戏中,使用 `do-while` 循环进行猜测,直到用户猜对或猜测次数用尽。
9. 在每次猜测后,调用 `check_guess` 函数检查猜测结果并输出提示信息。
10. 游戏结束后,询问用户是否继续游戏。
注意事项:
1. 由于涉及到随机数生成,需要在主函数中使用 `srand` 函数设置随机数种子,以确保每次运行程序时都能得到不同的随机数。
2. 在读取用户输入时,需要判断输入是否合法,即必须是一个四位数字且每个数字不重复。如果输入不合法,需要重新读取输入。
3. 在输出提示信息时,只能使用 + 和 -,不能使用其他字符,否则程序无法正确判断猜测结果。
4. 在进行循环或条件判断时,需要注意控制变量的范围,避免出现数组越界等错误。
阅读全文