プロが教える店舗&オフィスのセキュリティ対策術

/*
テスト用データは半角英数字で書き、半角スペースで区切ってメモ帳で書きました
 
Elfe 1 1 100 10 10 10 10 10 5 3 0 1
goblin 1 1 100 10 10 10 10 10 5 3 0 1
Slime 1 1 100 10 10 10 10 10 5 3 0 1
Orc 1 1 100 10 10 10 10 10 5 3 0 1

実行して表示させてみたところ大きな数字に化けます。
Elfe 7665736 7665740 7665744 7665748 7665752 7665756 7665760 7665764 7665768 766
5772 7665776 7665780 15012128
7665912 7665916 7665920 7665924 7665928 7665932 7665936 7665940 7665944 766594
8 7665952 7665956 15012128

なにがいけないのでしょうか?
よろしくお願いします。
*/

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

typedef struct{// 構造体の宣言
char name[128];//プレイヤーキャラの名前 1
int loading;//ダンジョン階 2
int lv;//レベル 3
int exp;//経験値 4
int hp;//ヒットポイント 5
int mp;//マジックポイント 6
int atk;//攻撃力 7
int def;//防御力 8
int agi;//敏捷力 9
int heal;//回復量 10
int dmg;//ダメージ 11
int y;//Y座標 12
int x;//X座標 13
}player;

int main(void)
{
int i, cnt;
FILE *fp;
player pc[MAX]; // 構造体配列の宣言

if( (fp = fopen( "player.txt", "r" )) == NULL ) {
printf( "ファイルがオープンできません\n" );
exit( 1 );
}
for( i = 0; i < MAX; ++i ) {
if( fscanf( fp, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n" // 構造体配列への読み込み
,pc[i].name, &pc[i].loading, &pc[i].lv, &pc[i].exp, &pc[i].hp, &pc[i].mp, &pc[i].atk, &pc[i].def, &pc[i].agi, &pc[i].heal, &pc[i].dmg, &pc[i].y, &pc[i].x ) != 4) break;
}
fclose( fp );

cnt = 0; // これでテスト
printf( "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n"
,pc[cnt].name, &pc[cnt].loading, &pc[cnt].lv, &pc[cnt].exp, &pc[cnt].hp, &pc[cnt].mp, &pc[cnt].atk, &pc[cnt].def, &pc[cnt].agi, &pc[cnt].heal, &pc[cnt].dmg, &pc[cnt].y, &pc[cnt].x);
cnt = 1;
printf( "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n"
,pc[cnt].name, &pc[cnt].loading, &pc[cnt].lv, &pc[cnt].exp, &pc[cnt].hp, &pc[cnt].mp, &pc[cnt].atk, &pc[cnt].def, &pc[cnt].agi, &pc[cnt].heal, &pc[cnt].dmg, &pc[cnt].y, &pc[cnt].x);
return 0;
}

A 回答 (1件)

printfの"%d"と、それに対応する引数をよく考えてください。



質問に書かれてるのは以下のような事です。
int i = 0;
printf("%d", &i);
    • good
    • 0
この回答へのお礼

コピペで済まそうとしたのが、ダメダメでした。
ソース書くときは、注意します。
いい勉強ができました。

お礼日時:2014/12/13 19:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!