92070


下記の問題に対して、ファイルを出力する所までは出来たのですが、並び替えの方法が分からず詰まってしまいました。  
どなたか教えて頂けないでしょうか？

[code]

    #include <stdio.h>
    
    void main()
    {
        int i, n;
        int sin[9][6];
        FILE* fp;
    
        fp = fopen("before_sort2.txt", "r");
    
        for (i = 0; i < 9; i++) {
            fscanf(fp,"%s", &(sin[i]));
        }
    
        fclose(fp);
    
        for (i = 0; i < 9; i++) {
            printf("%s\n", sin[i]);
        }
    }
    
[/code]

  0. 前提条件  
アルファベットがランダムに記載されたテキストファイル before_sort.txt を手入力で作成する

例）

[code]

    AAA
    CCC
    BBB
    III
    DDD
    HHH
    FFF
    EEE
    GGG
    
[/code]

  1. 作成した before_sort.txt をプログラムで読み込む
  2. コマンドラインからパラメータを受け取り、数字を昇順/降順に並べ替える

例） ASC を入力

[code]

    AAA
    BBB
    CCC
    DDD
    EEE
    FFF
    GGG
    HHH
    III
    
[/code]

例） DESC を入力

[code]

    III
    HHH
    GGG
    FFF
    EEE
    DDD
    CCC
    BBB
    AAA
    
[/code]

★ポイント01 「文字」と「文字列」の違いを意識すること  
今回は「文字列」を複数個（複数行）格納する必要がある  
★ポイント02 1bit、1byteとはどのような単位か  
プログラムでよく使うint型やchar型は何byteか  
自分の開発環境ではどうなっているかsizeof関数で確認すること


CC BY-SA 4.0
2022-11-07T07:48:23.683
92060
2022-11-07T23:35:09.340
2022-11-07T10:05:15.783
26370
55007
question
c
C言語の文字列の並び替えについて


SO 的には「回答」があるほうが良いと思うので、題意を故意に満たしていない回答を提示

[code]

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    char data[9][6]={
        "YZ.",
        "DEF",
        "PQR",
        "STU",
        "MNO",
        "ABC",
        "VWX",
        "GHI",
        "JKL",
    };
        
    void printdata() {
        for (int i=0; i<9; ++i) {
            printf("%s\n", data[i]);
        }
        printf("\n");
    }
    
    int descending_compare(const void* lh, const void* rh) {
        return -strcmp(lh, rh);
    }
    int main(int argc, char* argv[]) {
        printdata();
        qsort(data, 9, 6, strcmp);
        printdata();
        qsort(data, 9, 6, descending_compare);
        printdata();
    }
    
[/code]

オイラからの課題１．実際にコンパイルして実行してみること  
課題２．なぜこれで文字列のソートになるのか理解し SO 読者に解説すること  
課題３．このコードには直したほうが良い点がいくつか故意に含まれているので、修正してみること


CC BY-SA 4.0
2022-11-07T23:35:09.340
92070
2022-11-07T23:35:09.340
8589
92060
answer