gpt4 book ai didi

C 随机,有问题

转载 作者:行者123 更新时间:2023-11-30 14:23:44 30 4
gpt4 key购买 nike

void getS(char *fileName){
FILE *src;
if((src = fopen(fileName, "r")) == NULL){
printf("%s %s %s", "Cannot open file ", fileName, ". The program is now ending.");
exit(-1);
}
//char *get = " ";

int c = 1;
char ch = 'x';
while(ch!=EOF) {
ch = fgetc(src);
if(ch == '\n') c++;
}
fseek(src, 0, SEEK_SET);
int random = rand() % c;
int i = 0;
for(i = 0; i < random; i++){
while(ch != '\n'){
ch = fgetc(src);
}
}
do{
ch = fgetc(src);
if(ch != '\n' && ch != EOF){
printf("%c", ch);
}
}while(ch != '\n' && ch != EOF);
printf("%c", '\n');
fclose(src);
}

所以这是我的函数,它抓取一个文件并打印出文件中的随机单词(如果每个单词由新行分隔)。

问题1:为什么随机数优先于前 2 个单词?

问题 2:我该如何制作才能多次使用此函数而不执行 printf("%c", '\n');因为如果我最后没有这个函数,前一个函数调用就会覆盖旧的函数。

提前致谢,今天我一直在问一些问题,感谢 stackoverflow 的所有帮助! :)

附注使用 srand(时间(NULL));

最佳答案

看看这里的逻辑:

    for(i = 0; i < random; i++){
while(ch != '\n'){
ch = fgetc(src);
}
}

一旦遇到换行符,您将不会再读取任何字符,因此您始终会打印第一行或第二行。

你可以这样修复它:

    for(i = 0; i < random; i++){
ch = fgetc(src); // start by reading the first character on the line
while(ch != '\n'){
ch = fgetc(src);
}
}

Jim Balter 还指出,ch 最好声明为 int。这是因为 EOF 不被视为常规字符。

关于C 随机,有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576078/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com