92123


C言語で、ASCを入力したら昇順  
DESCを入力したら降順のプログラムを作ろうとしているのですが、降順の方が上手くいかず、どなたか間違っている個所を教えて頂けないでしょうか？

[code]

    #include <stdio.h>
    #include <string.h>
    
    void swap(char* a, char* b) {
        char t[10];
        strcpy(t, a);
        strcpy(a, b);
        strcpy(b, t);
    }
    
    void sort(char s[][6], int n, int f) {
        int i, j, t;
        if (f == 0) {
            for (i = 1;i < n;i++) {
                for (j = 1;j < n;j++) {
                    if (strcmp(s[j - 1], s[j]) > 0) {
                        strcpy(t, s[j - 1]);
                        strcpy(s[j - 1], s[j]);
                        strcpy(s[j], t);
                    }
                }
            }
        }
        else {
                for (i = 1;i < n;i++) {
                    for (j = 1;j < n;j++) {
                        if (strcmp(s[j - 1], s[j]) < 0) {
                            strcpy(t, s[j - 1]);
                            strcpy(s[j - 1], s[j]);
                            strcpy(s[j], t);
                        }
                    }
                }
        }
    }
    
    void main()
    {
        int i, n;
        char sin[9][6];
        char com[16];
        FILE* fp;
    
        fp = fopen("before_sort2.txt", "r");
    
        if (fp == NULL) {
            printf("ファイルオープン失敗\n");
            return -1;
        }
    
        for (i = 0; i < 9; i++) {
            fscanf(fp, "%s", &(sin[i]));
        }
        fclose(fp);
    
        printf("command >");
        scanf("%s", com);
        if (strcmp(com, "ASC") == 0) {
            sort(sin, 9, 0);
        }
        else if (strcmp(com, "DESC") == 0) {
            sort(sin, 9, 1);
        }
    
        for (i = 0; i < 9; i++) {
            printf("%s\n", sin[i]);
        }
    }
    
[/code]


CC BY-SA 4.0
2022-11-10T02:17:31.070
92118
2022-11-10T04:22:06.547
2022-11-10T02:57:11.877
3054
55007
question
c
C言語の文字列のソートについて


sort関数のオート変数tが間違っています。  
qsort標準関数を使わないのは学校の課題だからですか？


CC BY-SA 4.0
2022-11-10T03:14:26.827
92121
2022-11-10T03:14:26.827
54985
92118
answer


VC++でビルドすると以下のようなエラーと警告が報告されます。(フォーマットは変えています)  
降順処理が出来るか否かよりも、最初の昇順処理も完全では無かったということでしょう。

[code]

    行  種類    内容
    17  エラー  初期化されていないローカル変数 't' が使用されます
    17  警告    '関数': 間接参照のレベルが 'char *' と 'int' で異なっています。
    17  警告    'strcpy': の型が 1 の仮引数および実引数と異なります。
    19  警告    '関数': 間接参照のレベルが 'char *' と 'int' で異なっています。
    19  警告    'strcpy': の型が 2 の仮引数および実引数と異なります。
           28行目と30行目もそれぞれ17行目と19行目と同じ警告(エラーは表示されないが内容は同じ)
    39  警告    'n': ローカル変数は 1 度も使われていません。
    48  警告    'main': 戻り値の型が 'void' で宣言された関数が、値を返しました。
    
[/code]


CC BY-SA 4.0
2022-11-10T04:22:06.547
92123
2022-11-10T04:22:06.547
26370
92118
answer