Code und Laufzeitresultat
Navigieren Sie in das Verzeichnis ~/project
und erstellen Sie eine Projekt-Datei namens typing3.c
:
cd ~/project
touch typing3.c
Das gemäß den obigen Richtlinien geschriebene Programm ist unten gezeigt:
#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;
}
Der Makro KTYPE
repräsentiert die Anzahl der Blöcke, die 16 beträgt, und das Array kstr
wird verwendet, um die Zeichenketten zu speichern, die aus den Zeichen jedes Blocks von links nach rechts angeordnet bestehen.
Im Hinblick auf das Trainingsziel wird die Aufgabe nicht das Zeichen ?
enthalten, daher lautet die letzte für den Block deklarierte Zeichenkette NM<> _
und nicht NM<>?_
(da das Programm die Leertaste nicht zur Erstellung von Aufgaben verwendet, wird kein Fehler auftreten).
Wenn Ihr Tastaturlayout sich von dem in diesem Beispiel gezeigten unterscheidet, ändern Sie bitte die Deklaration des Arrays kstr
entsprechend.
Die erste do while
-Schleife ist für die Erstellung der Aufgabe verantwortlich.
- Die Variable
k
gibt an, aus welchem Block die Aufgabe generiert werden soll. Da dieser Wert dem Index des Arrays kstr
entspricht, wird er als eine Zufallszahl größer oder gleich 0 und kleiner als KTYPE
festgelegt.
Da die Anzahl der Blöcke KTYPE
16 beträgt, wird die generierte Zufallszahl im Bereich von 0 bis 15 liegen.
- Die Variable
p
gibt an, welches Zeichen innerhalb des Blocks versteckt werden soll, um die Aufgabe zu generieren. Da dieser Wert dem Index der für die Aufgabe verwendeten Zeichenkette innerhalb des Blocks entspricht, wird er als eine Zufallszahl größer oder gleich 0 und kleiner als die Anzahl der Zeichen innerhalb des Blocks festgelegt.
Angenommen, k
ist 0, der Block besteht aus 5 Zeichen, '12345'
, daher wird p
als eine Zufallszahl im Bereich von 0 bis 4 festgelegt. Zusätzlich, wenn k
3 ist, besteht der Block aus 8 Zeichen, '&'()=~|'
, daher wird p
als eine Zufallszahl im Bereich von 0 bis 7 festgelegt.
- Die Variable
key
repräsentiert das versteckte Zeichen.
Beispielsweise, wenn k
0 und p
2 ist, ist das Zeichen '3'
im Block '12345'
das key
. Da das Programm bereits das Leerzeichen ''
für Zeichen zugewiesen hat, die nicht zur Erstellung von Aufgaben verwendet werden sollen, wird die do-while
-Schleife verwendet, um die Aufgabe neu zu generieren, wenn das versteckte Zeichen key
ein Leerzeichen ist.
Als Nächstes kopiert die Funktion strcpy
kstr[k]
nach temp
und weist temp[p]
das Zeichen '?' zu. Dadurch wird die Zeichenkette 12?45
erzeugt, die auf dem Bildschirm angezeigt werden soll.
Wenn das Programm in der Lage ist, die Zeichenkette temp
anzuzeigen und das von der Tastatur eingegebene Zeichen key
zu lesen, ist es korrekt. Wie bei den vorherigen Tippübungsprogrammen akzeptiert dieses Programm nicht falsch eingegebene Zeichen. Nach 30 Trainingsrunden wird die Ausführung des Programms beendet.
Kompilieren und starten Sie das Programm mit den folgenden Befehlen:
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)…