• 締切済み

cプログラミングについて

以下はsample.txtというファイルを読み込み、辞書順に並べるプログラミングですが、どう正しく 直したらよいかわかりません。間違っている場所を指摘していただけたらと思います。 (間違えだらけで申し訳ありません) #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINE 500 void mysort(char *word[MAXLINE]) { int i,j; char *tmp; for(i=0;;i++){ for(j=i+1;; j++){ if(strcmp(word[j],word[i])==1){ tmp=word[i]; word[i]=word[j]; word[j]=tmp; } } } } int main(void) { int i; FILE *fp; char str[MAXLINE]; fp= fopen("sample.txt", "r"); if (fp == NULL) { printf("fopen error\n"); exit(1); } while(( fgets( str, MAXLINE, fp )) != NULL) mysort(str); for(i=0;; i++) printf("%s\n", str[i]); return 0; }

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

sample.txt 内のある一行に次のような文字列が記録されていた場合, simaku これをアルファベットの昇順に並べて次のような文字列にしたいということでしょうか。 aikmsu 正しく動作するか否かは不問にしても,質問文のmysort()でやろうとしていることはそういうことですよね。 もしかして,質問者のしたいことというのが, 一行中の0文字目,1文字目,2文字目,3文字目……を並べ替えるのではなく, 一行中の文字列の並びはいっさい変えずに0行目,1行目,2行目,3行目……を並べ替え対象としたいのなら, このような小さなサンプルプログラムにおいては "sample.txt" の全行を配列にため込むのが常套だと思います。 整列をどうするかは保留するとして,全行を配列にため込むというのはこんな風なコードのことです。 #include <stdio.h> #define MAXLINE 500 #define MAXLENGTH 80 int main(void) { int i; FILE *fp; char str[MAXLINE][MAXLENGTH]; fp = fopen("sample.txt", "r"); if (fp == NULL) { printf("fopen error\n"); exit(1); } i = 0; while (fgets(str[i], MAXLENGTH, fp) != NULL) { i++; } int totallines = i; for (i = 0; i < totallines; i++) { printf("%s", str[i]); } return 0; }

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

ソート以前にいろいろおかしな所があります > for(i=0;;i++){ > for(j=i+1;; j++){ ループに終了条件がないように見えます。というか全部無限ループ > if(strcmp(word[j],word[i])==1){ strcmp() の仕様を良く読んでください。==0, >0,<0 とは書いてあると思いますが、どこにも1とは書いてないと思います。まあ、名前が同じだけで自作したライブラリならかまいませんが。 > while(( fgets( str, MAXLINE, fp )) != NULL) > mysort(str); これ1行 str に読むたびに mysort() 呼び出してますが、意図してますか? > for(i=0;; i++) printf("%s\n", str[i]); str[i] は char 型で %s に一致しませんし、この時点で str には sample.txt の最終行しか残ってません > void mysort(char *word[MAXLINE]) 一致しないと言えば mysort() も一致してませんね。ここから想像するに > char str[MAXLINE]; が sample.txt の行数分必要そうな感じがしますが、さて?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「どう正しく直したらよいかわかりません」ということは, あなたはこのプログラムが「間違っている」と思ったわけですね. いかなる理由で「間違っている」と思ったのですか?

simaku
質問者

補足

実際に実行してみたら、エラーが出てしまったからです。

関連するQ&A

専門家に質問してみよう