下のプログラムは、ファイルに書いてある、姓と名のデータを
構造体にもたせ、それぞれ出力させるというものです。
これの応用として、関数を使って構造体にデータをもたせる
プログラムに改良したいのですが、よくわかりません。
根本的なものはあまり変わらないと思っているのですが、
どなたか、詳しくアドバイスお願いします。
#include<stdio.h>
#define dFamilySize(32)
#define dNameSize(32)
#define dPersonSize(1024)
#define dBufferSize(64)
typedef struct _PROFILE PROFILE;
struct _PROFILE
{
char family[dFamilySize];
char name[dNameSize];
};
main()
{
int i,j,k;
char line[dBufferSize];
PROFILE list[dPersonSize];
for(i=0; i<dPersonSize; i++){
list[i].family[0]='\0';
list[i].name[0]='\0';
}
i=0;
while(fgets(line,dBufferSize,stdin)!=NULL){
for(j=0; line[j]!=' '; j++){
list[i].family[j]=line[j];
}
list[i].family[j]='\0';
for(k=0,j++; line[j]!='\0'; j++,k++){
list[i].name[k]=line[j];
}
list[i].name[k]='\0';
printf("%s\n",list[i].family);
i++;
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
fgets()は…指定されたサイズか、改行までを渡されたアドレスに読み込む。
というものでは?
構造体のメンバ変数には改行コードが入っているのですか?
読み込もうとしているファイルにはどのようにデータが入っているのですか?
構造体の場合、メンバ変数1つずつ処理するのが定石かと思いますが。
バイナリファイルで処理するのであれば、sizeof()で構造体の中身を丸ごと読み書きでもいいかもしれませんが。
# ただし、ポインタを含んでいないことと、合計サイズが「定義したメンバ変数の合計」にはならない場合がありますが。
No.1
- 回答日時:
ファイルから構造体にデータを格納する部分を
関数にしたいだけなんでしょうか?
int readProfile(PROFILE list[], size_t listLength, FILE* stream);
として、while ループでまわしている部分を切り出せばよいのでは?
エラーをどうするかは要件次第ということで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
c言語で文書を読み込み、単語の...
-
C言語でのCSVファイルの読み出...
-
HANDLEのエラー
-
[C言語 Windows] Visual Cでの...
-
空白を含んだ文字列がうまく格...
-
文字列の探索
-
矢印キーを押下してコンソール...
-
英文字の出現頻度
-
PICとPCでのシリアル通信
-
ファイル名の変換
-
c言語のプログラミングでキーボ...
-
バイナリファイル(画像)のよみ...
-
char型2つを結合し、short型に...
-
C言語のNULLについて
-
C言語で複数列のデータを1列の...
-
C言語のプログラムで、途中で止...
-
C言語、ファイル操作、fgets()...
-
Cでファイルの行数をカウントす...
-
警告 W8075 問題のあるポインタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語のプログラムで、途中で止...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
【C言語】全角文字の配列を、全...
-
構造体メンバの初期化
-
Cでファイルの行数をカウントす...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
終了条件Ctrl+zについて,結果表...
-
Ç言語でファイルサイズを変更す...
-
C言語でのCSVファイルの読み出...
-
エラーについて質問です。
-
C++で指定文字列のカウント方法...
-
fscanfの使い方
-
VC++でSQLへSELECT文を送ったの...
-
ファイル操作で全角空白を消す
おすすめ情報