2012-03-25 36 views
0

這段代碼應該從一個文件中獲取整數並對其進行排序,並獲取文件中的第一個整數,該整數是要排序的整數數量,隨後的整數是要整理的整數。我不明白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 2012-03-25 08:39:51

+0

@galymzhan想不出任何我的頭頂。爲什麼? – littleadv 2012-03-25 08:41:20

+0

因此,fgets獲取整數,sscanf將該整數分配給array_int?我對嗎?爲什麼sscanf中有== 1? – John 2012-03-25 08:41:28