#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char aName[256]; // 名前
int nAge; // 年齢
float fHeight; // 身長
float fWeight; // 体重
}PersonalData;
int Input ( PersonalData* pData );
void Output ( PersonalData* pData , int );
void Save ( PersonalData* pData , int );
void Load ( PersonalData* pData , int );
#define MinCount(1)
#define MaxCount (3)
void main ( void )
{
PersonalData aData[3];
int nNumHuman;
#if 1
// データ入力
nNumHuman = Input ( &aData[0] );
// データセーブ
Save ( &aData[0] , nNumHuman );
#else
// データロード
Load ( &aData[0] , nNumHuman );
// データ出力
Output ( &aData[0] , nNumHuman );
#endif
// キー入力待ち
rewind (stdin);
getchar();
return;
}
int Input ( PersonalData* pData )
{
int Name_Count;
for ( int InputNum = 1; InputNum < 4; InputNum++ )
{
printf ( "%d人目のデータ \n" , InputNum );
printf ( "姓(全角5文字以内) > " );
scanf ( "%s" , &pData -> aName[0] );
Name_Count = strlen ( &pData -> aName[0] );
printf ( "名(全角5文字以内) > " );
scanf ( "%s" , &pData -> aName[Name_Count] );
printf ( "年齢(半角2ケタ) > " );
scanf ( "%d" , &pData -> nAge );
printf ( "身長(cm) (半角数字・少数第1位まで) > " );
scanf ( "%f" , &pData -> fHeight );
printf ( "体重(kg) (半角数字・少数第1位まで) > " );
scanf ( "%f" , &pData -> fWeight );
pData++;
}
return 0;
}
////////////////////
// //
// セーブ関数 //
// //
////////////////////
void Save ( PersonalData* pData , int nNumHuman )
{
FILE* fp;
fp = fopen ( "savedata.bin", "wb" );
if ( fp == NULL )
{
printf ( "FILE OPEN ERROR\n" );
}
if ( pData != NULL )
{
while ( 1 )
{
fwrite ( &nNumHuman , sizeof ( int ) , 1 , fp );
fwrite ( &pData , sizeof ( pData ) , nNumHuman , fp );
fclose ( fp );
break;
}
printf ( "セーブしました\n" );
}
}
////////////////////
// //
// ロード関数 //
// //
////////////////////
void Load ( PersonalData* pData , int nNumHuman )
{
FILE* fp;
fp = fopen ( "savedata.bin" , "rb" );
if ( fp == NULL )
{
fputs ( "FILE CLOSE ERROR\n" , stderr );
}
if ( pData != NULL )
{
while ( 1 )
{
fp = fopen ( "savedata.bin", "rb" );
fread ( &nNumHuman , sizeof ( int ) , 1 , fp );
fread ( &pData , sizeof ( int ) , nNumHuman , fp );
fclose ( fp );
break;
}
printf ( "セーブしました\n" );
}
fclose ( fp );
}
void Output ( PersonalData* pData , int nNumHuman )
{
for ( int nCount_2 = 1; nCount_2 < nNumHuman; nCount_2++ )
{
printf ( "%d人目のデータ \n" , nCount_2 );
printf ( "姓名 : %s\n " , &pData -> aName[0] );
printf ( "年齢 : %d\n " , pData -> nAge );
printf ( "身長: %f cm\n" , pData -> fHeight );
printf ( "体重: %f kg\n" , pData -> fWeight );
pData++;
}
}
/////////////// EOF ///////////////
バイナリデータとして、データをセーブ、ロードするというプログラムを作っています。
自分なりにやってみたのですが、どうしてもうまくいきません。
間違いを教えていただけると幸いです。
よろしくお願いします。