从数组c中选择随机行



到目前为止,我已经将所有数据读取到一个数组

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>

int main(void) {
int i=0;
char* string[100];
char line[100];
FILE *file; 
file = fopen("plates.txt", "r"); 
while(fgets(line, sizeof line, file)!=NULL) {
printf("%s",line);
string[i]=line;
i++;
}
fclose(file);
return 0;
}

,但是我现在想要随机选择数组中的一行并打印它。所有的线都需要有相同的被选中的机会,但它们只能被选中一次。我不太确定该怎么做……

提前谢谢你

请注意string[i]=line这一行,因为它使string中的所有数组条目都指向最后一行读取,这不是您想要的,理解这一点非常重要。

也就是说,这里有一个解决问题的方法,假设我们可以将所有行存储在内存和堆栈中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_LINE_LENGTH 128
#define MAX_LINE_COUNT 1000
int main(int argc, char **argv) {
char lines[MAX_LINE_COUNT][MAX_LINE_LENGTH];
int numLines = 0;

if (argc < 2) {
fprintf(stderr, "missing file namen");     
return EXIT_FAILURE;
}

FILE *fp = fopen(argv[1], "r");
if (fp != NULL) {
while (fgets(lines[numLines++], MAX_LINE_LENGTH, fp)) {
printf("%03d> %s", numLines, lines[numLines-1]);
}
fclose(fp);
srand (time(NULL));
int randomIndex = rand() % numLines;
printf("Selected random line #%d> %s", randomIndex+1, lines[randomIndex]);
} else {
fprintf(stderr, "file '%s' not foundn", argv[1]);      
return EXIT_FAILURE;
}
}

对应输出:

➜  ~ gcc random-line.c && ./a.out random-line.c 
001> #include <stdio.h>
002> #include <stdlib.h>
003> #include <string.h>
004> #include <time.h>
005> 
006> #define MAX_LINE_LENGTH 128
007> #define MAX_LINE_COUNT 1000
008> 
009> int main(int argc, char **argv) {
010>     char lines[MAX_LINE_COUNT][MAX_LINE_LENGTH];
011>    int numLines = 0;
012>     
013>     if (argc < 2) {
014>        fprintf(stderr, "missing file namen");     
015>        return EXIT_FAILURE;
016>     }
017>    
018>     FILE *fp = fopen(argv[1], "r");
019>     if (fp != NULL) {
020>        while (fgets(lines[numLines++], MAX_LINE_LENGTH, fp)) {
021>             printf("%03d> %s", numLines, lines[numLines-1]);
022>        }
023>        fclose(fp);
024>        srand (time(NULL));
025>        int randomIndex = rand() % numLines;
026>        printf("Selected random line #%d> %s", randomIndex+1, lines[randomIndex]);
027>    } else {
028>        fprintf(stderr, "file '%s' not foundn", argv[1]);      
029>        return EXIT_FAILURE;
030>    }
031> }
Selected random line #2> #include <stdlib.h>

相关内容

  • 没有找到相关文章

最新更新