前提・実現したいこと
data.txtに書かれている10個の少数を、バブルソートで並び替えて、out.txtに出力するプログラムを作成したいです。
実行時に、’+’ ’ー’ を入力することで昇降順を降順を降順を決めます。
kadai11_3.exe + data.txt out.txt の形で実行したいです、
発生している問題・エラーメッセージ
コンパイルは、問題なくできたのですが、実行結果に何も表示されません。 なので、適当な位置にprintf();を置いてみた所、ファイル入力の後までは表示されるのに、昇降順を決めるコードの場所から表示されないくなることが分かりました。 どのようにすれば、実行結果が表示されるのでしょうか?
該当のソースコード
#include <stdio.h> #include <stdlib.h> /*昇順のバブルソート*/ void bubble_sort1(double a[], int n){ int i,j,t; for(i = 0 ; i < n-1 ; i++){ for(j = n-1 ; j > i ; j--){ if(a[j-1] > a[j]){ t = a[j]; a[j] = a[j-1]; a[j-1] = t; } } } } /*降順のバブルソート*/ void bubble_sort2(double a[], int n){ int i,j,t; for(i = 0 ; i < n-1 ; i++){ for(j = n-1 ; j > i ; j--){ if(a[j] > a[j-1]){ t = a[j]; a[j] = a[j-1]; a[j-1] = t; } } } } int main(int argc,char *argv[]){ int i=0,j=0; char tmp[256]; double a[10]; double n; char str ={'+'}; /*ファイル入力*/ FILE *fp; fp = fopen("data.txt", "r"); if(fp == NULL){ printf("ファイルが開けませんでした\n"); exit(1); } while(fgets(tmp, sizeof(tmp), fp) != NULL){ n = (double)atoi(tmp); a[i] = n; i++; } fclose(fp); printf("a\n"); /*昇順・降順を判断する*/ if(strcmp(argv[1],str)==0){ bubble_sort1(a,i+1); }else{ bubble_sort2(a,i+1); } printf("i\n"); /*ファイル出力*/ FILE *outputfile; outputfile = fopen("out.txt", "w"); if(outputfile == NULL){ printf("ファイルが開けませんでした\n"); exit(1); } while(a[j] != '\0'){ fprintf(outputfile, "%f\n",a[j]); j++; } fclose(outputfile); printf("比較回数:"); printf("交換回数:"); return 0; }
試したこと
適当な位置にprinf();を入れてみること、コードの見直しなど
補足情報(FW/ツールのバージョンなど)
コマンドプロンプト VS2019
回答3件
あなたの回答
tips
プレビュー