Sie nicht müssen Sie alle Wörter in Ihr Programm lesen, nur um eines auszuwählen.
Sie können stattdessen auf einen beliebigen Punkt in der Word-Datei suchen, kriechen, bis Sie eine neue Zeile sehen (oder was auch immer Worte trennt), verwenden fgets()
oder scanf()
in einem Wort zu lesen und schließen Sie die Datei:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void random_word(const char *file_name, char *buffer, size_t length) {
FILE *file = fopen(file_name, "r");
if (file == NULL) {
fprintf(stderr, "Can't open %s!\n", file_name);
exit(EXIT_FAILURE);
}
(void) fseek(file, 0L, SEEK_END);
long size = ftell(file);
int c = EOF;
while (c == EOF || fgets(buffer, length, file) == NULL) {
long offset = random() % size;
(void) fseek(file, offset, SEEK_SET);
while ((c = getc(file)) != EOF && c != '\n');
}
buffer[strlen(buffer) - 1] = '\0'; // remove trailing \n
(void) fclose(file);
}
int main() {
srandom(time(NULL));
char buffer[1024];
for (int i = 0; i < 10; i++) {
random_word("/usr/share/dict/words", buffer, sizeof(buffer));
(void) puts(buffer);
}
return 0;
}
Beispiel
> ./a.out
boloman
disentrance
guanase
decorable
snibbled
redemandable
Cluniac
balneal
turbidimetry
catechistically
>
Dieser Code muss nicht komplex noch effizient sein, da es ein seltenes Ereignis ist, die Verarbeitung weist, dass Sie ein neues Wort auswählen und es geschieht auf einer menschlichen Zeit f rame, keine Hochgeschwindigkeitsverarbeitung.
haben Sie versucht, mit der Funktion rand() eine Zahl zwischen 1 und 1000 zu generieren? – bruceg
Siehe [question] (http://stackoverflow.com/questions/40118509/read-random-line-from-txt-file). –