main関数の中で第二コマンドライン引数を指定し、0を入力したときは昇順、1を入力したときは降順でファイル内の数字を並べたいです。
しかしどのようなコードを書けば指定できるのかが分かりません。ご教授お願いいたします。
#include <stdio.h> #include <stdlib.h> #include "sort_array.h" void read_data(char *fn, int *arr, int n){ FILE *fp; if((fp = fopen(fn, "r")) == NULL){ fprintf(stderr, "ファイル%sが開けません\n", fn); exit(1); } for(int i = 0; i < n; i++) fscanf(fp, "%d", &arr[i]); fclose(fp); } void write_result(char *fn, int *arr, int n){ FILE *fp; if((fp = fopen(fn, "w")) == NULL){ fprintf(stderr, "ファイル%sが開けません\n", fn); exit(1); } for(int i = 0; i < n; i++) fprintf(fp, "%d\n", arr[i]); fclose(fp); } int main(int argc, char* argv[]){ int N = atoi(argv[1]); // ここに第2コマンドライン引数で,0:昇順と1:降順を指定したい // ここに関数ポインタの配列を定義したい int *scores = (int *) malloc(N*sizeof(int)); read_data(argv[3], scores, N); // ここにinsert_sort関数の第3引数に比較関数へのポインタを指定したい write_result(argv[4], scores, N); } ```sort_array.hの中身 ```ここに言語を入力 int asc(void *p, void *q){ return *(int *)p - *(int *)q; } int desc(void *p, void *q){ return *(int *)q - *(int *)p; } void insert_sort(int *arr, int n, int (*cmp)(void*, void*)){ int i, j, temp; for(i = 1; i < n; i++){ temp = arr[i]; for(j = i; j > 0; j--){ if(cmp(&arr[j-1], &temp) > 0) arr[j] = arr[j-1]; else break; } arr[j] = temp; } }
呈示されたコードは何をするものですか?
insert_sort と asc は sort_array.h の中で宣言されていると思いますが、
どのように宣言されていますか?
第2コマンドライン引数が 0 か 1 かを見ているところがないように見えますが、
どうなっているんですか?
ソースコードが読みづらいですので、質問文の修正をお願いします。
(マークダウン記法のため、#includeのなどの#で始まる行がは見出しになってしまいます)
https://teratail.com/help/question-tips#questionTips3-5-1
https://teratail.com/questions/238564
あたりを参考にしてソースコードを適切に表示するようにしてください。
回答2件
あなたの回答
tips
プレビュー