現在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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ぜんぜん読んでないですけど、思ったことだけ。
>//ファイル情報を取得
>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 ) {} な感じで書くのが王道です。
回答ありがとうございます。少しでも情報を頂けて嬉しいです。ありがとうございます。”getData() の戻り値とすれば”とのことですが、以前チャレンジしたのですが、上手くいかず、諦めてしまいました。実引数、仮引数などの理解もまだまだ未熟ですね(泣)夜も遅いので、もしまたお時間がありましたら、助言を頂けたらと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
SGファイルって何ですか?
-
CSVファイルへの保存の際、デー...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
[VBScript]ファイルの入出力を...
-
VB6でのファイル作成方法
-
VBに、Cのincludeのようなもの...
-
大きいサイズのテキストファイ...
-
fopenできる上限の変更
-
同じ名前のファイルを作った場...
-
■ 移植性のないポインタ変換に...
-
プログラムで文字をBMPファイル...
-
C言語のfopenについて教えてく...
-
CSVファイル
-
Javascript で INI の読み書き
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報