从文件中获取数据并随机显示行而不在C中重复

时间:2017-11-17 01:57:39

标签: c file random fromfile

我需要从文件中获取问题,然后随机显示它们以输入答案。 我所做的是我生成一个随机数,然后文件逐行读取。当它满足随机数时,它将显示相关的行。 现在一切正常,但我不想复制数字。我怎么能解决这个问题。

这是我试过的

   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;
            }
    }

1 个答案:

答案 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;
}