Fgets и Sscanf - PullRequest
       39

Fgets и Sscanf

0 голосов
/ 25 марта 2012

Предполагается, что этот код получает целые числа из файла, который является finput, и сортирует его, и получает первое целое число в файле, которое представляет собой число целых чисел, которые будут отсортированы, и следующие целые числа являются целыми числами, которые должны быть отсортированы.Я не понимаю, как fgets и sscanf работают вместе.Может кто-нибудь объяснить, как fgets и sscanf работают в этом коде?

FILE *finput;
int *array_int, c1, no_elem;
char numlines[500];

fgets(numlines, 500, finput); 
array_int = (int *)malloc(sizeof(int)*no_elem);
if ((sscanf(numlines, "%d", &no_elem) == 1) &&  array_int!= NULL)
{
    for(c1=0; fgets(numlines, 500, finput) != NULL; )  
    {
        if (sscanf(numlines, "%d", &array_int[c1])==1) 
        {
            ++c1;
        }
    }
}

1 Ответ

3 голосов
/ 25 марта 2012

fgets получает строку (то есть строку текста) из файла.

sscanf анализирует строку на основе строки формата. Это обратно к sprintf. функции <x>printf и сопоставление <x>scanf позволяют форматировать вывод и ввод соответственно со строкой стандартного формата. Например, "%d" означает «целочисленное значение со знаком», а в контексте <x>scanf это означает «прочитать его в следующем параметре в следующем списке параметров» (ваш элемент массива в вашем случае).

Вы можете выполнить синтаксический анализ непосредственно из файла, используя fscanf, но вместо этого используйте fgets + sscanf, что обеспечивает большую гибкость и может быть более безопасным.

...