如何将每次猜测结果的反馈改为“数字正确位置错误”?
时间: 2023-10-05 11:08:19 浏览: 14
如果要将每次猜测结果的反馈改为“数字正确位置错误”,可以使用以下方法:
1. 首先,将生成的随机数转换为字符串,方便后面的操作:
```c
char num_str[4];
sprintf(num_str, "%d", num);
```
2. 接着,将用户猜测的数字也转换为字符串,然后逐位比较两个字符串的字符。如果字符相同,且在同一位置上,就说明猜测结果是数字和位置都正确的,输出“数字和位置都正确”。如果字符相同,但不在同一位置上,就说明猜测结果是数字正确但位置错误的,输出“数字正确位置错误”。
```c
char guess_str[4];
sprintf(guess_str, "%d", guess);
int i, j, correct_num = 0, correct_pos = 0;
for (i = 0; i < 4; i++) {
if (guess_str[i] == num_str[i]) {
correct_pos++;
}
for (j = 0; j < 4; j++) {
if (guess_str[i] == num_str[j]) {
correct_num++;
break;
}
}
}
if (correct_pos == 4) {
printf("恭喜你,你猜对了!你用了%d次机会。\n", tries);
break;
} else {
printf("%d个数字正确位置错误,%d个数字和位置都正确。\n", correct_num - correct_pos, correct_pos);
}
```
完整的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int num, guess, tries = 0;
char num_str[4];
srand(time(0));
num = rand() % 9000 + 1000;
sprintf(num_str, "%d", num);
printf("猜数字游戏!\n");
do {
printf("请输入一个4位数字:");
scanf("%d", &guess);
tries++;
char guess_str[4];
sprintf(guess_str, "%d", guess);
int i, j, correct_num = 0, correct_pos = 0;
for (i = 0; i < 4; i++) {
if (guess_str[i] == num_str[i]) {
correct_pos++;
}
for (j = 0; j < 4; j++) {
if (guess_str[i] == num_str[j]) {
correct_num++;
break;
}
}
}
if (correct_pos == 4) {
printf("恭喜你,你猜对了!你用了%d次机会。\n", tries);
break;
} else {
printf("%d个数字正确位置错误,%d个数字和位置都正确。\n", correct_num - correct_pos, correct_pos);
}
} while (guess != num);
return 0;
}
```
这个代码允许用户猜测一个4位数字,然后和程序生成的4位随机数进行比较,输出数字正确位置错误的结果。