2012-03-25 9 views
0

このコードは、finputであるファイルから整数を取得してソートし、ソートされる整数の数であるファイル内の最初の整数を取得し、その後に続く整数はソートされる整数です。私はfgetsとsscanfが一緒に働く方法を知りません。誰かが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; 
     } 
    } 
} 

答えて

3

fgetsはファイルから文字列(つまりテキスト行)を取得します。

sscanfは、フォーマット文字列に基づいて文字列を解析します。 sprintfとは逆です。 <x>printfと一致する<x>scanf関数を使用すると、標準的な書式文字列を使用して、書式付きの出力と入力を行うことができます。たとえば、"%d"は「符号付き整数値」を意味し、<x>scanfという文脈では、「次のパラメータのリストの次のパラメータに読み込む」という意味です。

fscanfを使用してファイルから直接解析できますが、代わりにfgets + sscanfを使用すると、より柔軟性が増し、より安全になる可能性があります。

+0

'fscanf'が安全でないかもしれない理由の例を追加できますか? – galymzhan

+0

@galymzhanは私の頭の上から何も考えられません。どうして? – littleadv

+0

したがって、fgetsは整数を取得し、sscanfはその整数をarray_intに割り当てますか?私は正しい?なぜsscanfに== 1がありますか? – John