너 은 모든 단어를 프로그램으로 읽어 들여 하나를 선택해야합니다.
대신, 워드 파일에서 임의의 지점으로 추구 할 때까지 함께 크리프 수 있습니다
당신 (나 단어를 구분 무엇이든), fgets()
또는 scanf()
이 한 단어 읽기 및 파일 종료하는 데 사용하는 줄 바꿈을 참조하십시오
#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;
}
을
이 드문 이벤트 처리 - 현명로이 코드는 새 단어를 선택하고 인간 시간 (F)에 발생하는 것으로, 복잡한도 효율적으로 할 필요는 없습니다
> ./a.out
boloman
disentrance
guanase
decorable
snibbled
redemandable
Cluniac
balneal
turbidimetry
catechistically
>
예 rame, 고속 처리가 아닙니다.
rand() 함수를 사용하여 1에서 1000 사이의 숫자를 생성 해 보았습니까? – bruceg
이 [질문] (http://stackoverflow.com/questions/40118509/read-random-line-from-txt-file)을 참조하십시오. –