Código e Resultado da Execução
Navegue até o diretório ~/project e crie um arquivo de projeto chamado typing3.c:
cd ~/project
touch typing3.c
O programa escrito de acordo com as diretrizes acima é mostrado abaixo:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getputch.h"
#define NO 30 /* Number of exercises */
#define KTYPE 16 /* Number of blocks */
int main(void)
{
char *kstr[] = {"12345", "67890-^\\", /* Layer 1 */
"!\"#$%", "&'() =~|", /* Layer 1 [Shift] */
"qwert", "yuiop@[", /* Layer 2 */
"QWERT", "YUIOP`{", /* Layer 2 [Shift] */
"asdfg", "hjkl;:]", /* Layer 3 */
"ASDFG", "HJKL+*}", /* Layer 3 [Shift] */
"zxcvb", "nm,./\\", /* Layer 4 */
"ZXCVB", "NM<> _", /* Layer 4 [Shift] */
};
int i, stage;
clock_t start, end; /* Start and end times */
init_getputch();
srand(time(NULL)); /* Set the seed for random number generation */
printf("Start typing association exercises.\n");
printf("Please enter the hidden character indicated by '?'.\n");
printf("Press the space key to start.\n");
fflush(stdout);
while (getch() != ' ')
;
start = clock(); /* Start time */
for (stage = 0; stage < NO; stage++) {
int k, p, key;
char temp[10];
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(); /* End time */
printf("Time taken: %.1f seconds.\n", (double)(end - start) / CLOCKS_PER_SEC);
term_getputch();
return 0;
}
A macro KTYPE representa o número de blocos, que é 16, e o array kstr é usado para armazenar as strings consistindo em caracteres de cada bloco, organizados da esquerda para a direita.
Em termos de propósitos de treinamento, a pergunta não conterá o caractere ?, então a última string para o bloco declarado é NM<> _ em vez de NM<>?_ (já que o programa não usa a tecla de espaço para gerar perguntas, ele não produzirá um erro).
Se o layout do seu teclado for diferente do mostrado neste exemplo, modifique a declaração do array kstr de acordo.
O primeiro loop do while é responsável por gerar a pergunta.
- A variável
k indica de qual bloco gerar a pergunta. Como este valor corresponde ao índice do array kstr, ele é definido como um número aleatório maior ou igual a 0 e menor que KTYPE.
Como o número de blocos KTYPE é 16, o número aleatório gerado variará de 0 a 15.
- A variável
p indica qual caractere dentro do bloco deve ser ocultado para gerar a pergunta. Como este valor corresponde ao índice da string usada para gerar a pergunta dentro do bloco, ele é definido como um número aleatório maior ou igual a 0 e menor que o número de caracteres dentro do bloco.
Assumindo que k é 0, o bloco consiste em 5 caracteres, '12345', então p é definido como um número aleatório variando de 0 a 4. Além disso, se k é 3, o bloco consiste em 8 caracteres, '&'()=~|', então p é definido como um número aleatório variando de 0 a 7.
- A variável
key representa o caractere oculto.
Por exemplo, se k é 0 e p é 2, o caractere '3' no bloco '12345' é a key. Como o programa já atribuiu o caractere espaço '' a caracteres que não devem ser usados para gerar perguntas, o loop do-while é usado para regenerar a pergunta se o caractere oculto key for um caractere espaço.
Em seguida, a função strcpy copia kstr[k] para temp e atribui '?' a temp[p]. Isso gera a string 12?45 para ser exibida na tela.
Se o programa for capaz de exibir a string temp e ler o caractere key inserido do teclado, ele estará correto. Como os programas de exercícios de digitação anteriores, este programa não aceita caracteres digitados incorretamente. Após 30 rodadas de treinamento, o programa encerrará a execução.
Compile e execute usando os seguintes comandos:
cd ~/project
gcc -o typing3 typing3.c -lcurses
./typing3
Start typing association exercises.
Please enter the hidden character indicated by '?'.
Press the space key to start.
AS?FG
?m,./\
67890-?\
?XCVB
zx?vb
!"?$%
ZXC?B
hjk?;:]
…(omit)…