Существует ли функция c-runtime, эквивалентная fscanf, которая содержит тот же список параметров?

Привет у меня есть такая функция

while(fscanf(fp,"\n%d\t%s\t%s\t%X%X\t%d\t  \n",&record.Index,record.Name,record.Empcode,&record.CSN_MSB,&record.AccessRights)!=EOF)
 {
  printf("\nIndex: %d\nEmployee Name: %s\nEmpcode: %s\nCSN: %X\nAccessRights: %d\n",record.Index,record.Name,record.Empcode,record.CSN_MSB,record.AccessRights);
  sprintf(CSN_MSB_LSB,"%X", record.CSN_MSB);
  if(strncmp(CSN_MSB_LSB,str,8)==0)
  found=1;       
 }

в этом коде мой fscanf читает только одну строку из указателя файла fd, я хочу прочитать все строки из файла. как я могу сделать это с той же функцией fscanf или любой другой альтернативой, которая содержит тот же список параметров для функции fscanf, пожалуйста, предложите мне


person amar    schedule 03.07.2013    source источник


Ответы (1)


Я бы попробовал что-то в этом роде:

    while(fscanf(fp,"%d%s%s%X%X%[^\n]*c",
          &record.Index,record.Name,record.Empcode,
          &record.CSN_MSB,&record.AccessRights)!=EOF)
    {

Тем не менее, стоит отметить, что вы сканируете 6 элементов и сохраняете только 5. Кроме того, вы используете sscanf, который берет указатель на символ и передает ему указатель файла (дескриптор файла), вы хотите использовать fscanf при чтении из файл. Последний номер, который вы сканируете, никогда не сохраняется. «[^\n]» говорит о сканировании до новой строки и занимает место последнего числа, которое вы сканируете (хотя вы не сохраняете его в своем примере), а «*c» использует эту новую строку. См. это.

person blrg891    schedule 03.07.2013