1、読み込むデータ数を取得
2、データ数分だけ、構造体のメモリ領域をmallocし、それぞれの先頭アドレスを構造体のポインタ配列で定義したポインタ配列に確保
3、1で指定されたファイルを開き、2で確保した構造体にデータを格納
というプログラムを作りたいのですが、あってますでしょうか?実行結果の3行目の方法が心配です。
実行結果としては、データ数を入力してください:4
入力ファイル名を指定してください:gifts.dat
出力ファイル名を指定してください:gifts2.dat
表示形式変換後ファイルに出力しました。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUMBER (1000)
typedef struct{
char code[NUMBER];
char name[NUMBER];
int price;
}gift;
int main(void)
{
FILE *fp;
FILE *fq;
char a[NUMBER];
int num,i;
gift*item[NUMBER];
printf("データ数を入力してください:");
scanf("%d",&num);
printf("ファイル名を指定してください:");
scanf("%s",a);
if((fp=fopen(a,"r"))==NULL)
{
printf("ファイルが見つかりません./n");
}
else
{
for(i=0;i<num;i++){
if((item[i]=(gift*)malloc(sizeof(gift)))==NULL)
printf("メモリ確保に失敗しました\n");
else{
fscanf(fp,"%s %s %d",item[i]->code,item[i]->name,&item[i]->price);
}
}
}
if((fq=fopen("gifts2.dat","w"))==NULL)
{
printf("ファイルが見つかりません\n");
}
else{
for(i=0;i<num;i++){
fprintf(fq,"code: %s\n name:%s\n price: %d\n",item[i]->code,item[i]->name,item[i]->price);
free(item[i]);
}
}
printf("表示形式変換後ファイルに出力しました。\n");
fclose(fp);
fclose(fq);
return 0;
}
No.1ベストアンサー
- 回答日時:
おなじ課題やっている方がいますよ。
>実行結果の3行目の方法が心配です。
そもそも2行目も実行結果例と違いますよね?
×ファイル名を指定してください:
○入力ファイル名を指定してください:
現状では読み込んだデータでなにやらやっているワケでもないので、1レコード読み込んで1レコード書き出す。
でも問題はないような気がしますが。
入力ファイル内のデータが1000レコードを越えていたり、最初の「データ数を入力してください:」で入力ファイルにあるデータより多い数を入力したり…の場合が問題起こしそうですけど。
No.2
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
C言語のプログラムで、途中で止...
-
空白を含んだ文字列がうまく格...
-
C言語についてです。
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
NetBIOS名のエラー
-
エラーについて質問です。
-
ビルドエラーの対処がわからな...
-
バイナリファイル(画像)のよみ...
-
[C言語 Windows] Visual Cでの...
-
「an=(n-1)/(n+1)のときlim[n→∞...
-
マイナスからプラスへ転じた時...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
DWORDの実際の型は何でしょうか
-
fgetsなどのときのstdinのバッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
空白を含んだ文字列がうまく格...
-
char型2つを結合し、short型に...
-
【C言語】全角文字の配列を、全...
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
C++で指定文字列のカウント方法...
-
C言語で複数列のデータを1列の...
-
C言語でのCSVファイルの読み出...
-
構造体メンバの初期化
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
Ç言語でファイルサイズを変更す...
-
ファイル操作で全角空白を消す
-
矢印キーを押下してコンソール...
-
セグメンテーションエラーの原...
-
static付き宣言の初期化
-
ファイルから数字列を16進数の...
おすすめ情報