我需要从文件中获取问题,然后随机显示它们以输入答案。 我所做的是我生成一个随机数,然后文件逐行读取。当它满足随机数时,它将显示相关的行。 现在一切正常,但我不想复制数字。我怎么能解决这个问题。
这是我试过的
int main()
{
int numb;
int answer;
int ar[5];
int count =0;
numb = randomgen();
ar[count]=numb;
char input[512];
printf("Line number to print :%d\n",numb);
count++;
while(count != 6)
{
FILE * pToFile= fopen("data.txt","r");
int line =0;
while(fgets(input,512,pToFile))
{
line++;
if(line == numb)
{
printf(" %s",input);
}
}
printf("Enter the answer:");
scanf("%d",&answer);
printf("\n");
answermethod(numb,answer); //to check the answers ;WORKING
numb = randomgen2(ar);
ar[count] = numb;
count++;
fclose(pToFile);
}
return 0;
}
int randomgen()
{
int r;
srand(time(NULL));
r=rand()%(5)+1;
return r;
}
int randomgen2(int ars[]) //generate random n and search it in the
//array if it is not in array return the random
// value.But this is not working
{
int r;
srand(time(NULL));
r=rand()%(5)+1;
int num,i,c=0;
int n= sizeof(ars)/sizeof(ars[0]);
for(i=0;i<n;i++)
{
if(ars[i]==r)
{
//printf("%d",r);
randomgen2(ars);
c=1;
break;
}
else
{
printf("not found%d",r);
c=0;
}
}
if(c==0)
{
printf("nooo");
return r;
}
}
答案 0 :(得分:1)
未初始化的变量和未初始化的数组ar
将导致未定义的行为。
该文件只需打开一次。使用rewind
返回到开头。
如评论中所述,仅使用srand
一次。并且您已将数组大小传递给函数,因为在foo(int ar[])
中ar
的大小是指针大小,而不是分配大小。
只需检查是否已使用随机数。如果未使用,则将其存储在数组中。随机数和数组大小的范围应完全匹配。不要添加+1
int main(void)
{
srand((unsigned int)time(NULL));
FILE *pToFile = fopen("data.txt", "r");
char input[512];
int line;
int arr[5];
int array_size = sizeof(arr) / sizeof(arr[0]);
for (int count = 0; count < array_size; count++)
{
arr[count] = -1; // initialize to -1 to indicate it is not set
while(arr[count] == -1)
{
arr[count] = rand() % array_size;
for(int i = 0; i < count; i++)
if(arr[i] == arr[count])
arr[count] = -1;
}
rewind(pToFile);
line = 0;
while(fgets(input, 512, pToFile))
{
if(line++ == arr[count])
{
printf("%s", input);
break;
}
}
}
fclose(pToFile);
return 0;
}