头文件getputch.h

/*
* getputch.c
*/
/* 用于getch/putch的通用头文件"getputch.h" */ #ifndef __GETPUTCH #define __GETPUTCH #if defined(_MSC_VER) || (__TURBOC__) || (LSI_C) /* MS-Windows/MS-DOS(Visual C++, Borland C++, LSI-C 86 etc ...)*/ #include <conio.h> static void init_getputch(void) { /* 空 */ } static void term_getputch(void) { /* 空 */ } #else /* 提供了Curses库的UNIX/Linux/OS X环境 */ #include <curses.h> #undef putchar
#undef puts
#undef printf
static char __buf[]; /*--- _ _putchar:相当于putchar函数(用“换行符+回车符”代替换行符进行输出)---*/
static int __putchar(int ch)
{
if (ch == '\n')
putchar('\r');
return putchar(ch);
} /*--- putch:显示1个字符,清除缓冲区 ---*/
static int putch(int ch)
{
int result = putchar(ch); fflush(stdout);
return result;
} /*--- _ _printf:相当于printf函数(用“换行符+回车符”代替换行符进行输出)---*/
static int __printf(const char *format, ...)
{
va_list ap;
int count; va_start(ap, format);
vsprintf(__buf, format, ap);
va_end(ap); for (count = ; __buf[count]; count++) {
putchar(__buf[count]);
if (__buf[count] == '\n')
putchar('\r');
}
return count;
} /*--- _ _puts:相当于puts函数(用“换行符+回车符”代替换行符进行输出)---*/
static int __puts(const char *s)
{
int i, j; for (i = , j = ; s[i]; i++) {
__buf[j++] = s[i];
if (s[i] == '\n')
__buf[j++] = '\r';
}
return puts(__buf);
} /*--- 库初始处理 ---*/
static void init_getputch(void)
{
initscr();
cbreak();
noecho();
refresh();
} /*--- 库终止处理 ---*/
static void term_getputch(void)
{
endwin();
} #define putchar __putchar
#define printf __printf
#define puts __puts #endif #endif

消除一个字符串:

/*
*type_erase_string.c
*/
#include<time.h>
#include<ctype.h>
#include<stdio.h>
#include<string.h>
#include"getputch.h" int main()
{
int i;
char *str = "How do you do?";
int len = strlen(str);
clock_t start, end;
init_getputch();
printf("please input as same\n");
printf("%s\n", str); fflush(stdout); start = clock();
for (i = ; i < len; i++)
{
int ch;
do
{
ch = getch(); //从键盘读取信息,getputch.h函数
if (isprint(ch))
{
putch(ch);
if (ch != str[i])
{
putch('\b'); //光标退一格
}
}
}while (ch != str[i]);
} end = clock();
printf("\nspend time %1.fs. \n", (double)(end - start) / CLOCKS_PER_SEC); //ubuntu14显示不出来,应该可以用localtime来显示
term_getputch();
return ;
}

消除已经输出的字符

/*
*type_erase_string_put.c
*/
#include<stdio.h>
#include<time.h>
#include<stdio.h>
#include<string.h>
#include"getputch.h" int main()
{
int i;
char *str = "How do you do?";
int len = strlen(str);
clock_t start, end;
init_getputch();
printf("please input as following\n");
start = clock();
for (i = ; i < len; i++)
{
//显示str[i]以后的字符并把光标返回到开头 \r 回车符
printf("%s \r", &str[i]);
fflush(stdout);
while(getch() != str[i])
;
} end = clock();
printf("spending time %.1f s \n", (double)(end-start)/CLOCKS_PER_SEC);
term_getputch();
return ;
}

输入多个字符串

/*
*type_put_more.c
*/
#include<stdio.h>
#include<time.h>
#include<string.h>
#include"getputch.h" #define QNO 12 int main()
{
char *str[QNO] = {"book", "computer", "default", "comfort", "monday",
"power", "light", "music", "programming",
"dog", "video", "include"}; int i, stage;
clock_t start, end; init_getputch();
printf("Starting practice type. \n");
printf("please enter space to start.\n"); while(getch() != ' ')
; start = clock(); for (stage = ; stage < QNO; stage++)
{
int len = strlen(str[stage]);
for (i = ; i < len; i++)
{
//显示str[stage][i]以后的字符并把光标返回到开头
printf("%s \r", &str[stage][i]);
fflush(stdout);
while (getch() != str[stage][i])
;
}
} end = clock(); printf("\rSpending time %.1f second . \n", (double)(end - start)/CLOCKS_PER_SEC);
term_getputch();
return ;
}

打乱出题顺序,使用数组来标识出题顺序

/*
*type_random.c
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"getputch.h" #define QNO 12
#define swap(type, x, y) do{type t = x; x = y; y = t;}while(0) int main()
{ char *str[QNO] = {"book", "computer", "default", "comfort", "monday",
"power", "light", "music", "programming",
"dog", "video", "include"}; int i, stage;
int qno[QNO]; //出题顺序
clock_t start, end;
init_getputch();
srand(time(NULL)); //设置随机数种子 for (i = ; i < QNO; i++)
{
qno[i] = i;
} for (i = QNO - ; i > ; i--) //打乱出题顺序
{
int j = rand()% (i + );
if (i != j)
{
swap(int , qno[i], qno[j]);
}
} printf("Starting type practice.\n");
printf("Starting after entering space .\n");
while (getch() != ' ')
; start = clock();
for (stage = ; stage < QNO; stage++)
{
int len = strlen(str[qno[stage]]);
for (i = ; i < len; i++)
{
printf("%s \r", &str[qno[stage]][i]);
fflush(stdout);
while (getch() != str[qno[stage]][i])
;
}
} end = clock();
printf("\r Costing time : %.1f seconds. \n", (double)(end - start)/CLOCKS_PER_SEC); term_getputch();
return ; }

交换指针打乱出题顺序:

/*
*type_random_2.c
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"getputch.h" #define QNO 12 #define swap(type, x, y) do {type t = x; x = y; y = t;} while(0) int main()
{ char *str[QNO] = {"book", "computer", "default", "comfort", "monday",
"power", "light", "music", "programming",
"dog", "video", "include"};
int i, stage;
clock_t start, end; init_getputch();
srand(time(NULL)); for (i = QNO - ; i > ; i--)
{
int j = rand()%(i+);
if (i != j)
{
swap(char *, str[i], str[j]);
}
} printf("Starting type practice\n");
printf("Start after entering space. \n");
while (getch() != ' ')
;
start = clock(); for (stage = ; stage < QNO; stage++)
{
int len = strlen(str[stage]);
for (i = ; i < len; i++)
{
printf("%s \r", &str[stage][i]);
fflush(stdout);
while(getch() != str[stage][i])
;
}
} end = clock();
printf("\r Costing time : %.1f seconds \n", (double)(end-start)/CLOCKS_PER_SEC);
term_getputch();
return ; }

键盘联想字符:输出键盘一块区域的字符,隐藏一个,打出隐藏的这个字符

/*
*type_keyboard.c
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include"getputch.h" #define NO 3
#define KTYPE 16 int main()
{
char *kstr[] = {"", "67890-=",
"!@#$%", "^&*()_+",
"qlert", "yuiop[]\\",
"QWERT", "YUIOP{}|",
"asdfg", "hjkl;'",
"ASDFG", "HJKL:\""
"zxcvb", "nm,./",
"ZXCVB", "NM<>?"}; int i, stage; clock_t start, end; init_getputch();
srand(time(NULL)); printf("Starting practice type \n");
printf("please use ? to hidden type. \n");
printf("Start entering space\n"); fflush(stdout);
while(getch() != ' ')
; start = clock(); for (stage = ; stage < NO; stage++)
{
int k, p, key;
char temp[]; do
{
k = rand() % KTYPE;
p = rand() % strlen(kstr[k]);
key = kstr[k][p];
}while(key == ' '); strcpy(temp, kstr[k]);
temp[p] = '?';
printf("%s", temp);
fflush(stdout);
while(getch() != key)
; putchar('\n');
} end = clock();
printf("Costing time : %.1f seconds. \n", (double)(end - start)/CLOCKS_PER_SEC); term_getputch();
return ;
}

TypeWriting的更多相关文章

  1. 【英语魔法俱乐部——读书笔记】 1 初级句型-简单句(Simple Sentences)

    第一部分 1 初级句型-简单句(Simple Sentences):(1.1)基本句型&补语.(1.2)名词短语&冠词.(1.3)动词时态.(1.4)不定式短语.(1.5)动名词.(1 ...

  2. A debugger is already attached

    Today is the last day that all the laptops of winXP OS should be upgrade to WIN7. After updated. whe ...

  3. 用Python来进行词频统计

    # 把语料中的单词全部抽取出来, 转成小写, 并且去除单词中间的特殊符号 def words(text): return re.findall('[a-z]+', text.lower()) def ...

  4. HDU5470 Typewriter (SAM+单调队列优化DP)

    Typewriter Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

随机推荐

  1. 使用k8s-prometheus-adapter实现HPA

    环境: kubernetes 1.11+/openshift3.11 自定义metric HPA原理: 首选需要注册一个apiservice(custom metrics API). 当HPA请求me ...

  2. linux 查找被删除但是未被释放空间的文件 并释放资源

    使用du -sh  和df -h 查看/data目录,发现结果相差一半,后来了解到: 使用rm命令删除文件时,只有当该文件不存在任何link才会被删除 当有进程访问这个文件时,这个文件的实际占用空间就 ...

  3. 发布.net core项目 System.AggregateException: 发生一个或多个错误

    背景:之前创建.net core webapi项目的时候SDK是2.2的版本,后改成2.1,发布的时候报错. 发布的时候报错,展示的信息是: 其实这里也大致能看到部分信息,但由于信息量太小,没办法知道 ...

  4. Oracle 查询练习

    非常经典的一些日常醒脑练习内容!! 如有更高效的写法欢迎赐教! .已知Oracle的Scott用户中提供了三个测试数据库表,名称分别为dept,emp和salgrade.使用SQL语言完成以下操作 ) ...

  5. 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码(转载)

    转载:  https://www.cnblogs.com/shushen/p/5311828.html 弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长 ...

  6. VS2017新建项目的模板之配置

    也不知道之前装VS2017的时候,做了什么操作,新建一个WinForm项目,自动记住了我当时新建的窗体的大小816*639(默认的300*300),现在每次新建窗体都这个大小,忍了一段时间,实在忍无可 ...

  7. python 排序 拓扑排序

    在计算机科学领域中,有向图的拓扑排序是其顶点的先行排序,对于每个从顶点u到顶点v的有向边uv,在排序的结果中u都在v之前. 如果图是有向无环图,则拓扑排序是可能的(为什么不说一定呢?) 任何DAG具有 ...

  8. python之三方库(冷门+热门)

    AES加密库 pycryptodome

  9. Asp.Net MVC控制器获取视图传值几种方式

    前台表单(V:视图) @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="v ...

  10. 英语_金丝楠是紫楠(phoebeSheareri)的别名

    姚黄魏紫俱凋零--红木家具今古谈(连载七) [上海木业网]楠木品种包括闽楠.细叶楠.红毛山楠.滇楠.白楠.紫楠.乌心楠.桢楠.水楠.香楠等二百余种之多,1997年的木材国家标准中就列入了八种.某些售卖 ...