fread,fwriteを使用して.binで読み込み書き出しをしているのですが、この状態で一度表示させるとcharなら「フフフフフフ...ソリッド」やintなら「-86475536」など
キチンと表示されません。charは[%-14s]などで試してみましたが変わらずでした。
fread,fwriteの使い方はこれで正しく使われているでしょうか?
また、表示させようとしているchar nameはソース内で書いた構造体か一度書き込んだ.binのどちらなのか判別はできるのでしょうか
よろしくお願いします
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
typedef struct{
char name[10];
int life;
int MP;
int att;
int defe;
}TEKI;
typedef struct{
char *iname;
short X;
short Y;
}ITEM;
typedef struct{
char *mp;
short x;
short y;
}MAP;
int main(void)
{
TEKI date[20]={
{"ソリッド ",100,100, 90, 80},
{"リキッド ",100,100, 70, 80},
{"ソリダス ",100,100, 80, 80},
{"レイヴン ", 80,100,100, 30},
{"ミラー ",100,100, 50, 50},
{"メリル ", 70, 40, 60, 60},
{"オセロット ",100,100, 50, 50},
{"ジョニー ", 80, 30, 60, 30},
{"ピューパ ", 80, 0, 80, 70},
{"ヴァンプ ", 80, 0, 80, 40},
{"オタコン ", 85,100, 45, 80},
{"ゼロ ",100,100, 80, 40},
{"シギント ",100,100, 30, 80},
{"パラメディック",100,100, 60, 60},
{"ソロー ",100,100, 70, 70},
{"ペイン ",100,100, 70, 60},
{"フィアー ",100,100, 70, 80},
{"オクトパス ",100, 0, 50, 90},
{"マンティス ",100, 80, 70, 70},
{"ビッグ.ボス",100,100, 90, 90},
},*OFF,*DEF,MC[2],teki;
ITEM item[]={
{"名前 ",16,5},
{"LIFE ",16,7},
{"MP ",16,9},
{"攻撃力",16,11},
{"防御力",16,13},
};
MAP map[4]={
{"+―――――――――――――――――――――――+",14,4},
{"| |",14,5},
{"+―――――――――――――――――――――――+",14,14},
};
HANDLE hStdout;
COORD pos;
FILE *fp_txt,*fp_bin;
int i,n,damage,rnd,wk,sen,kou,rand_hai[20];
int no,btl;
int ban=1;
int flg=0;
/*-------書き込み-------*/
//テキスト
fp_txt=fopen("monster.txt","w");
if(fp_txt==NULL){return -1;}
for(i=0;i<20;i++){
fprintf(fp_txt,"%s %3d %3d %3d %3d\n",date[i].name,date[i].life,date[i].MP,date[i].att,date[i].defe);
}
//バイナリ
fp_bin=fopen("monster.bin","wb");
if(fp_bin==NULL){return -1;}
fwrite(&teki,sizeof(TEKI),1,fp_bin);
fclose(fp_txt);
fclose(fp_bin);
/*----------------------*/
fp_bin=fopen("monster.bin","rb");
if(fp_bin==NULL){return -1;}
fread(&teki,sizeof(TEKI),1,fp_bin);
srand((unsigned)time(NULL));
for(i=0;i<20;i++) rand_hai[i]=i;
for(i=20;i>1;i--){
rnd=rand()%i;
wk=rand_hai[i-1];
rand_hai[i-1]=rand_hai[rnd];
rand_hai[rnd]=wk;
}
sen=rand_hai[0];
kou=rand_hai[1];
MC[0]=date[sen];
MC[1]=date[kou];
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdout,BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);
pos.X=14;
pos.Y=3;
SetConsoleCursorPosition(hStdout, pos);
printf("戦闘データ");
SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
/*--------枠組み--------*/
pos.X=map[0].x;
pos.Y=map[0].y;
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[0].mp);
pos.Y=map[1].y;
for(i=0;i<9;i++){
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[1].mp);
pos.Y++;
}
pos.Y=map[2].y;
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[2].mp);
/*----------------------*/
ban^=0x00000001;
OFF=&MC[ban];
DEF=&MC[ban^0x00000001];
//問題の部分
for(i=0;i<5;i++){
pos.X=50;
pos.Y=5;
SetConsoleCursorPosition(hStdout, pos);
printf("[%s]",teki.name);
_getch();
}
SetConsoleTextAttribute(hStdout,FOREGROUND_RED);
pos.X=16;
pos.Y=16;
SetConsoleCursorPosition(hStdout, pos);
printf("*** 処理終了です ***");
_getch();
SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); // 文字色を復帰
pos.X=0;
pos.Y=24;
SetConsoleCursorPosition(hStdout, pos);
fclose(fp_txt);
fclose(fp_bin);
return 0;
}