主體:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>#include"mygetch.h"#define MAX 51 //定義測試字母的最大長度void help()
{printf("\n****************************************");printf("\n*輸入過程中無法退出,輸入錯誤則以_表示!*");printf("\n按任意鍵開始測試,按下首字母時開始計時!*");printf("\n****************************************");
}
void start(char *str)
{srand((unsigned int)time(NULL));//隨機種子int i = 0;for(i = 0;i < MAX-1;i++)//打印50個英文字符用于測試{*(str+i) = rand()%26+'a';}*(str+MAX-1) = '\0'; //寫完字符后補上結束標志位
}
void on_game(char *str)
{
char ch;
int i = 0;
int count = 0;
time_t t_start,t_end;system("clear"); //先清屏
printf("\n%s\n",str);count = 0;
for(i = 0;i < MAX-1;i++)
{ch = mygetch();if(i == 0){t_start = time(NULL);}if(ch == *(str+i)){printf("%c",ch);count++;}else{printf("_"); //打印出錯標志}
}t_end = time(NULL); //取結束時間printf("\n正確輸入!\n用時 %ld s\n",t_end - t_start);printf("正確率%lf %%\n",(count*1.0/(MAX-1))*100);printf("按下Esc退出,任意鍵繼續!\n\n");
}int main()
{char str[MAX] = {0};while(1){help(); //游戲說明菜單start(str); //產生隨機字母mygetch();on_game(str); //開始游戲char ch = mygetch();if(ch == 27)//Esc的ascii為27{break;}system("clear"); //先清屏}return 0;
}
?mygetch.c
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include "mygetch.h"int mygetch(void)
{struct termios oldt, newt;int ch;// 獲取當前終端設置tcgetattr(STDIN_FILENO, &oldt);newt = oldt;// 修改終端設置 - 禁用回顯和規范模式newt.c_lflag &= ~(ICANON | ECHO);// 應用新設置tcsetattr(STDIN_FILENO, TCSANOW, &newt);// 獲取字符ch = getchar();// 恢復原始終端設置tcsetattr(STDIN_FILENO, TCSANOW, &oldt);return ch;
}
mygetch.h
#ifndef MYGETCH_H
#define MYGETCH_H// 聲明mygetch函數
int mygetch(void);#endif
?