Code et résultat d'exécution
Accédez au répertoire ~/project
et créez un fichier de projet nommé typing3.c
:
cd ~/project
touch typing3.c
Le programme écrit selon les directives ci-dessus est montré ci-dessous :
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getputch.h"
#define NO 30 /* Nombre d'exercices */
#define KTYPE 16 /* Nombre de blocs */
int main(void)
{
char *kstr[] = {"12345", "67890-^\\", /* Rangée 1 */
"!\"#$%", "&'() =~|", /* Rangée 1 [Shift] */
"qwert", "yuiop@[", /* Rangée 2 */
"QWERT", "YUIOP`{", /* Rangée 2 [Shift] */
"asdfg", "hjkl;:]", /* Rangée 3 */
"ASDFG", "HJKL+*}", /* Rangée 3 [Shift] */
"zxcvb", "nm,./\\", /* Rangée 4 */
"ZXCVB", "NM<> _", /* Rangée 4 [Shift] */
};
int i, stage;
clock_t start, end; /* Temps de début et de fin */
init_getputch();
srand(time(NULL)); /* Définir la graine pour la génération de nombres aléatoires */
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(); /* Temps de début */
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(); /* Temps de fin */
printf("Time taken: %.1f seconds.\n", (double)(end - start) / CLOCKS_PER_SEC);
term_getputch();
return 0;
}
La macro KTYPE
représente le nombre de blocs, qui est de 16, et le tableau kstr
est utilisé pour stocker les chaînes de caractères composées des caractères de chaque bloc disposés de gauche à droite.
En termes de but d'entraînement, la question ne contiendra pas le caractère ?
, donc la dernière chaîne pour le bloc déclaré est NM<> _
et non NM<>?_
(puisque le programme n'utilise pas la touche espace pour générer les questions, il ne produira pas d'erreur).
Si le layout de votre clavier est différent de celui montré dans cet exemple, veuillez modifier la déclaration du tableau kstr
en conséquence.
La première boucle do while
est chargée de générer la question.
- La variable
k
indique à partir de quel bloc générer la question. Étant donné que cette valeur correspond à l'indice du tableau kstr
, elle est définie comme un nombre aléatoire supérieur ou égal à 0 et inférieur à KTYPE
.
Étant donné que le nombre de blocs KTYPE
est de 16, le nombre aléatoire généré sera compris entre 0 et 15.
- La variable
p
indique quel caractère dans le bloc doit être masqué pour générer la question. Étant donné que cette valeur correspond à l'indice de la chaîne de caractères utilisée pour générer la question dans le bloc, elle est définie comme un nombre aléatoire supérieur ou égal à 0 et inférieur au nombre de caractères dans le bloc.
En supposant que k
soit égal à 0, le bloc est composé de 5 caractères, '12345'
, donc p
est défini comme un nombre aléatoire compris entre 0 et 4. De plus, si k
est égal à 3, le bloc est composé de 8 caractères, '&'()=~|'
, donc p
est défini comme un nombre aléatoire compris entre 0 et 7.
- La variable
key
représente le caractère masqué.
Par exemple, si k
est égal à 0 et p
est égal à 2, le caractère '3'
dans le bloc '12345'
est la key
. Étant donné que le programme a déjà assigné le caractère espace ''
aux caractères qui ne doivent pas être utilisés pour générer les questions, la boucle do - while est utilisée pour régénérer la question si le caractère masqué key
est un caractère espace.
Ensuite, la fonction strcpy
copie kstr[k]
dans temp
, et assigne '?'
à temp[p]
. Cela génère la chaîne 12?45
à afficher à l'écran.
Si le programme est capable d'afficher la chaîne temp
et de lire le caractère key
saisi au clavier, c'est correct. Comme les programmes d'entraînement à la frappe précédents, ce programme n'accepte pas les caractères mal saisis. Après 30 rounds d'entraînement, le programme mettra fin à son exécution.
Compilez et exécutez le programme en utilisant les commandes suivantes :
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?;:]
…(omission)…