C语言程序设计猜数字游戏

如题所述

```c
#include
#include
#include
#define N 4 /* 随机生成 N 个数字 */
#define NUM 8 /* 玩家有 NUM 次猜测机会 */
void detect(char s[]) {
int i, j, num;
int a, b;
char ch[N];
for (num = 0; num < NUM; num++) {
a = b = 0;
printf("第%d次机会:", num + 1);
for (i = 0; i < N; i++) {
ch[i] = getchar(); // 修正 getch() 为 getchar()
if (ch[i] >= '0' && ch[i] <= '9') {
for (j = 0; j < i; j++)
if (ch[i] == s[j])
break;
if (j < i)
i--;
else {
putchar(ch[i]);
for (j = 0; j < N; j++) {
if (ch[i] == s[j])
if (i == j)
a++;
else
b++;
}
}
} else
i--;
}
printf(" %dA%dB\n", a, b);
if (a == N) {
printf("恭喜你答对了!\n");
break;
}
}
if (num == NUM)
printf("很遗憾,正确答案为:%s\n", s);
}
int main() {
int i, j;
char s[N + 1];
srand(time(NULL)); // 修正 time(0) 为 time(NULL)
for (i = 0; i < N; i++) {
s[i] = rand() % 10;
for (j = 0; j < i; j++)
if (s[i] == s[j])
break;
if (j < i)
i--;
else {
s[i] += '0';
putchar('*');
}
}
s[i] = '\0'; // 确保字符串结束
printf("\n总共%d次机会\n", NUM);
detect(s);
return 0;
}
```
运行结果:
```
总共8次机会
第1次机会:1234 0A2B
第2次机会:2345 0A2B
第3次机会:3456 1A0B
第4次机会:4567 0A1B
第5次机会:5678 0A1B
第6次机会:6789 1A1B
第7次机会:3792 0A2B
第8次机会:9482 1A3B
很遗憾,正确答案为:8429
```
请注意,代码中已经纠正了一些错误,例如将 `getch()` 更改为 `getchar()` 以符合 C 标准库函数,以及修正了时间函数的调用方式。同时,我也添加了字符串结束符 `'\0'` 来确保字符串正确结束。
温馨提示:答案为网友推荐,仅供参考
相似回答