アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在C言語を学習中の超初心者の者です。C言語のファイル処理や関数、マージ、ポインタの処理に悪戦苦闘している日々を送っています(泣)
皆様に、是非、アドバイスを頂けたらと思い、投稿させて頂きました。
2つのテキストファイルを読み込み、それぞれ、ファイルの中身の文字列をソートし、昇順に並び替え、さらに、その2つのファイルをマージし、昇順に並び替え表示させる(関数を用いて)課題をクリアできずにいます。
int main(void)
{
char strAry1[20][20];
char strAry2[20][20];

//ファイル1"menber1.txt"情報を取得
getData( );
//ファイル1ソート前出力
putOut( );
//ファイル1情報ソート
sortString( );
//ファイル1ソート後出力
putOut( );

//ファイル2"kantoku1.txt"情報を取得
getData( );
//ファイル1ソート前出力
putOut( );
//ファイル2情報ソート
sortString( );
//ファイル2ソート後出力
putOut( );

return 0;
}
main()関数はこのようなイメージで考えているのですが、どうのように処理すればよいのでしうか?(泣)質問がアバウトで申し訳ありません。ちなみに、2つのテキストファイルの中身は
(1) "menber1.txt"--------
takahara
inamoto
endou
nakazawa
komano
abe
nakamura

(2) "kantoku1.txt"------
torushie
ofuto
jico
oshimu
kamo
okada
farukan

です。一応、途中まで考えて、いきずまってしまったソースです。→
int getData(char *filename, int count, char ss[][20]);
void putOut( char ss[][20], int count);
void sortString( char ss[][20], int count);
int main(void)
{
char strAry1[20][20];
char strAry2[20][20];
int count = 7;
//ファイル1情報を取得
getData("menber1.txt", count, strAry1);
//ファイル1ソート前出力
putOut( strAry1, count);
//ファイル1情報ソート
sortString(strAry1, count );
//ファイル1ソート後出力
putOut( strAry1, count);

//ファイル2情報を取得
getData("kantoku1.txt", count, strAry2);
//ファイル1ソート前出力
putOut( strAry2, count);
//ファイル2情報ソート
sortString(strAry2, count );
//ファイル2ソート後出力
putOut( strAry2, count);

return 0;
}
//ファイル情報を取得 
int getData(char *filename, int count, char ss[][20])
{
     FILE *fp1;

if((fp1 = fopen(filename, "r")) == NULL){ //ファイルオープン
printf("ファイルオープンできません\n");
exit(1);
}
count = 0;
while(fp1 != NULL){
fgets(ss[count], 20, fp1); //1行単位で文字列取得
if(feof(fp1))
break;
count++;
}
fclose(fp1);

return 0;
}
//ファイルを出力する
void putOut( char ss[][20], int count)
{
int i;
for(i=0; i<count; i++){
printf("%s",ss[i]);
}
printf("\n");
}
//ファイルをソートする
void sortString( char ss[][20], int count)
{
int i,j;
char temp[20];
for(i=0; i<count-1; i++){
for(j=i+1; j<count; j++){
if(strcmp(ss[i], ss[j]) > 0){
strcpy(temp, ss[i]);
strcpy(ss[i], ss[j]);
strcpy(ss[j], temp);
}
}
}
printf("ソート後\n");
}

少しでも情報がほしいです(泣)皆様忙しいと思いますが、助言をお願い致します。

A 回答 (2件)

 


 まとめて読み込んでソートすれば、一度ですむけどそれは、だめ?
 
    • good
    • 0
この回答へのお礼

回答ありがとうございます。一度チャレンジしてみたいと思います。
まだまだ入門レベルのビギナーでして、助言していただき感謝しています。ありがとうございます。

お礼日時:2007/06/12 09:41

ぜんぜん読んでないですけど、思ったことだけ。



>//ファイル情報を取得 
>int getData(char *filename, int count, char ss[][20])

ファイル名を関数に与えるのであれば、ファイルのオープンに失敗したことを呼出し側に伝える必要があると思います。関数の中でいきなり exit(1) してしまうのは問題かと。

個人的には、ファイル名でなくファイルポインタ FILE* を引数として渡して、ファイルのオープンはメイン側でやる方が良いように感じます。

>count = 0;
>while(fp1 != NULL){
>fgets(ss[count], 20, fp1); //1行単位で文字列取得
>if(feof(fp1))
>break;
>count++;

count を引数として渡してカウントアップしようとしているようですが、単純に getData() の戻り値とすれば済むはず。
fgets() でファイルを読み込む時は while ( fgets(...) != NULL ) {} な感じで書くのが王道です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。少しでも情報を頂けて嬉しいです。ありがとうございます。”getData() の戻り値とすれば”とのことですが、以前チャレンジしたのですが、上手くいかず、諦めてしまいました。実引数、仮引数などの理解もまだまだ未熟ですね(泣)夜も遅いので、もしまたお時間がありましたら、助言を頂けたらと思います。ありがとうございました。

お礼日時:2007/06/12 02:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!