2016-10-04 18 views
-3

私はStackOverflowを初めて使用しています。実際に私はこの質問をするために作成しました。コードの説明CのQSORTコード

私の専門家は、次のコードを含むスライド上を軽く塗りつぶし、誰もが紛失していました。

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 
    { ...} 
}