c语言关于记忆力训练的问题

编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892.屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。


停留几秒需要用到sleep()函数
数字消失需要用到清屏函数

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
 
int main(){   
    int i,clock=5;//暂停clock秒,初始化为5
    char ch;
    char a[101];//最大记忆字符数为100,最后一个是结束符\0
    printf("----------欢迎来到记忆力训练----------\n");
    printf("规则:玩家按照相反的顺序输入已记忆的字符串序列,\n"
           "例如提示的题目是5892.屏幕显示n秒钟,题目数字 \n"
           "自动消失,并提示输入,玩家需输入2985.游戏需要自定义题目\n "  );
    printf("请输入题目:\n");
    gets(a);//从控制台获取字符

    //倒计时显示设计:
    while(--clock>=0){
        Sleep(1000);
        printf("请注意:%d后结束题目显示\n",clock+1);
    }
    //时间到了之后进行清屏模式
    system("cls");
    printf("时间到!\n");
    printf("请玩家按照相反的顺序输入已记忆的字符串序列:\n");
    i=strlen(a)-1;//题目的最后一个字符的下标赋值给i
    while(getchar()==a[i]){//判断从控制台获取的字符是否和题目的倒序每一位相同
        i--;
    }
    if(i==-1){printf("恭喜你!答对了!\n");}
    else{printf("游戏失败,欢迎下次再玩!\n");}
    return 0;
}

img

img

解答如下,可以调节秒数

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define Max 255

void SleepSec(int sec,char str[])
{
    int tem;
    for(int i=0; i<sec; i++)
    {
        printf("字符串:");
        puts(str);
        printf("倒计时%d秒\n",sec-i);
        Sleep(1000);
        system("cls");
    }
}

void reserve(char str[],int len)
{
    for(int i=0; i<len/2; i++)
    {
        char tem=str[i];
        str[i]=str[len-1-i];
        str[len-1-i]=tem;
    }
}

int main()
{
    int num=15;//测试15次 
    while(num--)
    {
        int sec; 
        //=rand()%8+2;//2-10s
        char str[Max];
        printf("输入字符串:\n");
        fflush(stdin);
        gets(str);
        sec=strlen(str);//字符串多少个字符就几秒
        system("cls");
        SleepSec(sec,str);
        char input[Max];
        fflush(stdin);
        gets(input);
        reserve(input,strlen(input));
        if(strcmp(str,input)==0)
        {
            printf("\nright\n\n");
            printf("str:%s\ninput:%s\n",str,input); 
        }
        else
        {
            printf("\nerror\n\n");
            printf("str:%s\ninput:%s\n",str,input); 
        }
        return 0;
    }
}

这种用个随机数,然后sleep下n秒后再提示输入,比对就行

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int str_cmp(char rand_str[], char guess_str[])
{
    int i, len;
    int len_rand = strlen(rand_str);
    int len_guess = strlen(guess_str);

    if (len_rand != len_guess) return 1;
    for(i = 0; i<len; i++) {
        if(rand_str[i] != guess_str[len - i -1]) return 1;
    }
    return 0;
}

int main()
{
    int i=0, n, len;
    char rand_str[100], guess_str[100], bflush[255];
    printf("please input n s time for remeber num: ");
    scanf("%d", &n);

    srand(time(NULL));
    len = rand()%5+1; //1-9999
    for(i = 0; i<len; i++) {
        if (i%3==0) rand_str[i] = 'a' + rand()%26;
        if (i%3==1) rand_str[i] = 'A' + rand()%26;
        if (i%3==2) rand_str[i] = '0' + rand()%9;
    }
    rand_str[len] = '\0';

    printf("please remember str: %s, after %d s will miss", rand_str, n);
    fflush(stdout);
    sleep(n);

    for( i = 0; i < 50; i++) bflush[i] = ' '; bflush[i] = '\0';
    printf("\r%s\n", bflush);
    printf("please input the str reverse: ");
    getchar();
    gets(guess_str);

    if (str_cmp(rand_str, guess_str) == 0) printf("YES oye\n");
    else printf("NO sosad\n");

    printf("the orig str is %s\n", rand_str);
    return 0;
}

1.定义变量n表示暂停的时间,Windows C语言中函数Sleep();输入值的单位是毫秒;

2. 定义一个字符数组,用来存储已记忆的字符串序列;

3. 输入已记忆的字符串序列;

4. 暂停n秒;

5. 清空控制台显示;

6. 提示输入;

7. 读入输入的字符,判断是否输入正确,输出相应结果


#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

int main(){
    int n=2;//暂停n秒,n初始化为2
    char a[101];//假设最多记忆100个字符
    int i;
    printf("记忆力训练\n");
    printf("请输入已记忆的字符串序列:\n");
    gets(a);
    Sleep(n*1000);//Windows C语言中单位是毫秒,乘以1000就是2秒
    system("cls");//清空控制台显示
    printf("请玩家按照相反的顺序输入已记忆的字符串序列:\n");
    for(i=strlen(a)-1;i>=0;i--){
        if(getchar()!=a[i]){
            printf("输入错误!-_-");
            break;
        }
    }
    if(i==-1)printf("输入正确!^_^");
    system("pause");
    return 0;
}

可参照这个代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    time_t seed=0;
    time_t wait_time=0;
    int show_time=1;
    unsigned int i=1;
    char choose='1';
    char input1;
    unsigned int score=0;
    unsigned int input2;
    unsigned int flag=1;

    printf("准备好进行记忆测试了吗?\n");
    printf("屏幕上即将显示一串数字,你是否能记住它们呢?\n");
    printf("输入正确就可以挑战更高的难度了!\n");
    printf("按回车键开始!\n");
    getchar();
    printf("那么就开始吧!\n");
    int length=3;
    while(choose=='1'){
        for(;;length+=2,show_time++)
            {
                wait_time = clock();
                srand(time(&seed));
                for(i = 1; i <= length; i++)
                    printf("%u", rand() % 10);
                for( ; clock() - wait_time < show_time * CLOCKS_PER_SEC;);
                for(i=1; i<=length; i++)
                printf("\b \b");
                printf("\n记住了吗?那么就试试吧:");
                srand(seed);

                for(i = 1; i <= length; i++)
                {
                    input1=getchar();
                    input2=(int)input1-(int)'0';
                    if(input2 != rand() % 10)
                    {
                        printf("很遗憾!错误。正确答案:");
                        srand(seed);
                        for(i = 1; i <= length; i++)
                            printf("%u", rand() % 10);
                        flag=0;
                        break;
                    }
                }
                fflush(stdin);
                if(flag==0)break;
                score=score+length;
                printf("正确!继续挑战!下一个是:\n");
            }

       printf("\n你本次的分数为:%u\n是否重来?\n是-----1  否-----0\n",score);
       choose=getchar();
       if(choose=='1')printf("再来一次:\n");
       else printf("本次游戏结束,再见!");
       fflush(stdin);
    }
    return 0;
}

代码参考自实例链接:https://blog.csdn.net/twentyonepilots/article/details/80513070


//编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892.屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。
#pragma warning(disable:4996) //开头加这句或项目、属性、配置属性、C/C++、预处理器、预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char s[5],r[5];
    int i,v,n;

    n=5;
    srand((unsigned int)time(NULL));
    while (1) {
        for (i=0;i<4;i++) {
            v=rand()%10+'0';
            s[i]=v;r[3-i]=v;
        }
        s[4]=0;
        r[4]=0;
        cprintf("%s",s);
        for (i=0;i<n;i++) {
            cprintf(" %d",n-i);
            Sleep(1000);
            cprintf("\b\b");
        }
        cprintf("\b\b\b\bInput:");
        for (i=0;i<4;i++) {
            s[i]=getche();
            if (s[i]=='\r') return 1;//按回车键退出
        }
        s[4]=0;
        if (0==strcmp(s,r)) {
            cprintf(" OK!");
            return 0;
        } else {
            cprintf(" ERROR");
        }
        Sleep(3000);
        cprintf("\r                \r");
    }
    return 0;
}