2016-10-04 166 views
-3

我是StackOverflow的新手。事實上,我創建它只是爲了問這個問題。代碼QSORT代碼的說明C

我的教授輕輕地在包含以下代碼的幻燈片上滑動,每個人都迷路了,包括我自己在內。

main(int argc, char *argv[]){ 

    int nlines; /* number of input lines read */ 

    int numeric = 0; /* 1 if numeric sort */ 

    if (argc > 1 && strcmp(argv[1], "-n") == 0) 
     numeric = 1; 
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0) 
    { 
     qsort((void**) lineptr, 0, nlines-1, 
     (int (*)(void*,void*))(numeric ? numcmp : strcmp)); 
     writelines(lineptr, nlines); 
     return 0; 
    } 
    else 
    { ...} 
} 

你能詳細解釋一下到底發生了什麼嗎?

+1

我會說這是'sort'命令的源代碼,只能混淆舉行載玻片上,並避免了有趣的分揀部分:) –

+1

請格式化您的代碼。 –

+1

問問產品會更好嗎?他會得到報酬以幫助您 –

回答

1

nlines跟蹤從輸入中讀取的行數。 numeric跟蹤數字是否正在排序(而不是字符)。

我解釋其餘部分是註釋中:

int main(int argc, char *argv[]){ 

    int nlines; /* number of input lines read */ 

    int numeric = 0; /* 1 if numeric sort */ 

    /* evaluates whether or not numeric sorting is to be applied */ 
    if (argc > 1 && strcmp(argv[1], "-n") == 0) 
     numeric = 1; 

    /* this reads lines if there are any.*/ 
    /* it looks like `lineptr` must've been declared elsewhere */ 
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0) 
    { 
     qsort((void**) lineptr, 0, nlines-1, 
     (int (*)(void*,void*))(numeric ? numcmp : strcmp)); 
     /* sort the elements accordingly... e.g., either as strings or numerically. */ 


     writelines(lineptr, nlines); 
     return 0; 
    } 

    /* else gets run if there is no input to take */ 
    else 
    { ...} 
}