Чтение одного и того же файла дважды в коде на C

Если я читаю первую строку файла и сохраняю в какой-либо переменной, и если я снова читаю тот же файл и сохраняю в другом массиве, будет ли мой массив пропускать первую строку?

a1,a2,a3,a4,a5
b1,b2,b3,b4,b5
c1,c2,c3,c4,c5
d1,d2,d3,d4,d5
e1,e2,e3,e4,e5

Мой код выглядит так

    FILE* fp1 = fopen("test.csv","r");
    if(fp1 == NULL)
    {
      printf("Failed to open file\n");
      return 1;
    }

    fscanf(fp1,"%[^\n]",variable); 
    while((fscanf(fp1,"%[^,],%[^,],%[^,],%[^,],%[^\n]\n",C1,C2,C3,C4,C5)>0))
    {

        some function()     

    }
    for(i=1;i<=5;i++)
    {
       printf("%s\t", C1[i]);
       printf("%s\n", C2[i]);
    }

Мой вывод начинается со 2-й строки файла, т.е.

C1[i] = {b1,c1,d1,e1}  but not a1
C2[i] = {b2,c2,d2,e2}  but not a2

Может кто-нибудь объяснить, почему пропускается первая строка?

Спасибо,


person Siva Makani    schedule 16.10.2014    source источник
comment
попробуйте перемотать файл, т.е. fp1.rewind(). затем он укажет на начало файла   -  person chris    schedule 16.10.2014
comment
Ничего не пропускается. Вы снова не читаете файл. Вы читаете первую строку и делаете с ней одно действие, затем вы читаете строки со второй по последнюю и делаете с ними другое действие.   -  person hobbs    schedule 16.10.2014
comment
@chris: OP использует C. Так что я думаю, что вызов будет похож на rewind(fp1);.   -  person Don't You Worry Child    schedule 16.10.2014
comment
Спасибо всем за предложения, @hobbs: Мой вопрос: если я использую fscanf (fp1) во второй раз, будет ли он снова читать со второй строки или с первой строки? Спасибо   -  person Siva Makani    schedule 16.10.2014
comment
fscanf(fp1,"%*[^\n]%*c"); : пропустить первую строку.   -  person BLUEPIXY    schedule 16.10.2014
comment
@Don'tYouWorryChild, мой плохой, в последнее время я явно слишком много писал на C++   -  person chris    schedule 16.10.2014


Ответы (1)


Последующие вызовы fscanf из файла будут считываться дальше в файл, если не выполняется перемотка, если только поток не перематывается, как стандартный ввод.

person Hack Saw    schedule 16.10.2014