#include <stdio.h>
#include <stdlib.h>
// 構造体meiboの定義
struct meibo{
char name[20];
int age;
};
void dispall(FILE *fp); // ファイルの内容を表示する関数のプロトタイプ宣言
int inputmeibo(struct meibo* data); // キーボードからmeiboを1件入力する関数のプロトタイプ宣言
void main(int argc, char *argv[]){
FILE *fp;
struct meibo work;
// 引数のチェック
if ( argc < 2 ){
printf("ファイル名を指定してください\n");
return;
}
// ファイルオープン
if ( !(fp = fopen(argv[1], "a+" ) ) ){
printf("ファイルを作成できません\n");
return;
}
// ファイルポインタをファイルの最後に移動する
fseek(fp, 0, 2);
// キーボードから入力
while( inputmeibo(&work) ){
// ファイル書き込み
if ( fwrite(&work, sizeof(struct meibo), 1, fp) != 1 ){
printf("ファイル書き込みに失敗しました\n");
break;
}
}
// ファイルポインタをファイルの最初に移動する
fseek(fp, 0, 0);
// ファイルの内容を表示する
dispall(fp);
}
// ファイルの内容を表示する
void dispall(FILE *fp){
struct meibo work;
// ファイルから内容を1項目分読む
while( fread(&work, sizeof(struct meibo), 1, fp) == 1){
printf("名前:%s\n", work.name);
printf("年齢:%d\n\n", work.age );
}
}
// キーボードから入力する
// 何も入力されなかったら0、何か入力されたら1を返す
int inputmeibo(struct meibo* data){
char agetmp[20];
// 名前の入力
printf("名前--->");
gets(data->name);
if ( data->name[0] == '\0' )
return 0;
printf("年齢--->");
gets(agetmp);
data->age = atoi(agetmp);
printf("\n");
return 1;
}
|