- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 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
 - 76
 - 77
 - 78
 
                        #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <signal.h>
#include <sys/time.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <iostream>
using namespace std;
struct termios savetty;
struct termios tty;
char num[]="0123456789QWERTYUIOPASDFGHJKLZXCVBNM";
        char let[]="!\",#$%&'()*qwertyuiopasdfghjklzxcvbnm";
int t=1;
int tm=0;
int opnum=0;
  char buffer[30];
char var[1000];
char out[1000];
struct timeval tv;
struct timeval tv2;
int main()
{
  if ( !isatty(0) ) {
  fprintf (stderr, "stdin not terminal\n");
  exit (1);
  };
tcgetattr (0, &tty);
savetty = tty;
tty.c_lflag &= ~(ICANON|ISIG);
tty.c_cc[VMIN] = 1;
tcsetattr (0, TCSAFLUSH, &tty);
  srand(time(0));
  int i=0;
  bool c=true;
  time_t curtime;
  int passLen=200+rand()%400;
  for(int i=0;i<=passLen;i++){
    int s=rand()%2;
    if(s==1){
      out[i]=let[rand()%37];
    } else {
      out[i]=num[rand()%35];
    };
    if((i%5)==0 && i!=0)out[i]=' ';
  };
  out[passLen]='\0';
  int tt=gettimeofday(&tv, NULL);
  if(tt<0)exit(0);
  printf("%s\n",out);
  while(out[i]!='\0')
  {
    var[i]=getchar();
    if(var[i]!=out[i]){
      opnum++;
      printf("Er%c",out[i]);
    };
    i++;
  };
  tt=gettimeofday(&tv2, NULL);
  if(tt<0)exit(0);
  int tm=tv2.tv_sec-tv.tv_sec;
  int v=(passLen*60)/tm;
  int min=tm/60;
  tm%=60;
  printf("Time %d min %d sec\n",min,tm);
  cout<<"Num of errors "<<opnum<<" Speed "<<v<<endl;
  tcsetattr (0, TCSAFLUSH, &savetty);
  
};