-
Notifications
You must be signed in to change notification settings - Fork 0
/
kiokud2.c
75 lines (61 loc) · 2.43 KB
/
kiokud2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*单纯记忆训练(记忆数值:设定成“等级 = 位数”)*/
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STAGE 10 // 关卡数
#define LEVEL_MIN 3 // 最低等级(位数)
#define LEVEL_MAX 20 // 最高等级(位数)
/*---等待X秒---*/
int sleep (unsigned long x)
{
clock_t c1 = clock();
clock_t c2;
do{
if ((c2 = clock()) == (clock_t)(-1)) {
return 0;
}
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(int argc, char const *argv[])
{
int i, stage;
int level; // 等级(数值的位数)
int success = 0; // 答对的数量
clock_t start, end; // 开始时的时钟数,结束时的时钟数
srand(time(NULL)); // 设定随机数的种子
printf("数值记忆训练\n");
do
{
printf("要挑战的等级(%d~%d):", LEVEL_MIN, LEVEL_MAX);
scanf("%d", &level);
} while (level < LEVEL_MIN || level > LEVEL_MAX);
printf("来记忆一个%d位的数值吧。\n", level);
start = clock();
for( stage = 0; stage < MAX_STAGE; stage++)
{
char no[LEVEL_MAX + 1]; // 需要记忆的数字串
char x[LEVEL_MAX * 2]; // 已读取的数字串,之所以设置那么长,是因为怕有玩家会输入太多数字
no[0] = '1' + rand() % 9; // 开头字符是'1'~'9'
for(i = 1; i < level; i++)
no[i] = '0' + rand() % 10; // 之后是'0'~'9'
no[level] = '\0';
printf("%s", no);
fflush(stdout);
sleep(200 * level); // 字符串停留200*level毫秒
printf("\r%*s\r请输入:", level, " "); // 先输出level个空白字符覆盖数字,再显示提示
scanf("%s", x);
if(strcmp(no, x) != 0) // 使用strcmp函数判断字符串是否相等,相等会返回0
printf("\a回答错误。\n");
else
{
printf("回答正确。\n");
success++;
}
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}