困っています

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
CHAMA

困っています

#1

投稿記事 by CHAMA » 14年前

初めて掲示板で質問させていただきます

DXライブラリを使ってRPG系のゲームを作ろうとしています
「ゲームプログラミングの館」を一通りよんでいきましたが
「発展知識編」の「t0 セーブデータの作り方」でつまずきました;

そのサンプルプログラムをコピペして実行(ビルド?)してみたんですが、
エラーがでて実行できませんでした;

「"fopen"の宣言を確認してください」って表示されます
「fopen」に宣言なんてあったっけ?とか思ったので ココで質問しました

環境  
Windows 7
コンパイラ名 : VC++ 2008EE

自分の知識は
「苦しんで覚えるC言語」の「基礎編」 をある程度勉強してから
「ゲームプログラミングの館」を読んで勉強しています
プログラミングを初めて1ヶ月ぐらいです

↓↓こちらがコピペしたコードです
code
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//セーブデータの構造体
typedef struct{
int clear_flag; //クリアしたかどうかのフラグ
int money; //お金
int highscore; //ハイスコア
}save_data_t;

int main(){
char *name = "save_data.dat"; // save_data.dat(セーブデータファイル)
FILE *fp;
save_data_t save_data;

srand( (unsigned) time( NULL ) ); //時間による乱数の初期化

/*ファイルの内容からデータをロード*/
{
if( ( fp = fopen( name, "rb" ) ) == NULL ) {
printf("ファイルオープンエラー\n");
}
else{
//ファイルからデータを読み込む
fread( &save_data, sizeof(save_data_t), 1, fp ) ;
fclose( fp );//解放
printf("クリア:%d お金:%d ハイスコア:%d\n",
save_data.clear_flag, save_data.money, save_data.highscore);
}
}

{ //適当に値を代入してみる
save_data.clear_flag = rand()%2;
save_data.money = rand()%100;
save_data.highscore = rand()%10000;
}

/*データの内容をファイルにセーブ*/
{
if( ( fp = fopen( name, "wb" ) ) == NULL ) {
printf("ファイルオープンエラー\n");
}
else{
fwrite( &save_data, sizeof(save_data_t), 1, fp ) ;
fclose( fp );
}
}

return 0;
}

実行結果

クリア:0 お金:96 ハイスコア:1317
/code

CHAMA

追記

#2

投稿記事 by CHAMA » 14年前

上のコードのどこがいけないのでしょうか?
どこをどう 修正すればいいのかわかりません

教えてください おねがいします

通りすがりの名無し

Re: 困っています

#3

投稿記事 by 通りすがりの名無し » 14年前

まぁまずフォーラムルールを読んでから書き込んでください。
また書き込まれないからといって催促の返信などはやめましょう。
答えてもらえないのには理由があります。

またcodeは[]で挟まないと効果がありません。
さてコードに駄目というわけではないですが余分な{}があったので削除してインデントさせていただきました。
多分エラーの内容はエラーではなく警告ではないでしょうか?

fopenを使用していることによる警告だと思われます。
fopenは昔に作られた関数なので現在だとセキュリティ上おすすめされておりません。
使用できる事もあるのですがfopen_s()を使う事をおすすめします。
警告を消すだけですますのでしたら
#pragma warning(disable:4996)をソースの先頭に加える事で消すことも出来ます

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//セーブデータの構造体
typedef struct
{
	int clear_flag; //クリアしたかどうかのフラグ
	int money; //お金
	int highscore; //ハイスコア
}save_data_t;

int main()
{
char *name = "save_data.dat"; // save_data.dat(セーブデータファイル)
FILE *fp;
save_data_t save_data;

srand((unsigned) time( NULL )); //時間による乱数の初期化

/*ファイルの内容からデータをロード*/
 fopen_s( &fp, name, "rb" );
if( fp == NULL )
{
  printf("ファイルオープンエラー\n");
}
else
{
	//ファイルからデータを読み込む
  fread( &save_data, sizeof(save_data_t), 1, fp ) ;
  fclose( fp );//解放
  printf("クリア:%d お金:%d ハイスコア:%d\n",
  save_data.clear_flag, save_data.money, save_data.highscore);
}


//適当に値を代入してみる
save_data.clear_flag = rand()%2;
save_data.money = rand()%100;
save_data.highscore = rand()%10000;


/*データの内容をファイルにセーブ*/
fopen_s( &fp, name, "wb" ) ;
if( fp== NULL )
{
	printf("ファイルオープンエラー\n");
}
else
{
	fwrite( &save_data, sizeof(save_data_t), 1, fp ) ;
	fclose( fp );
}

return 0;
}

CHAMA

返信ありがとうございます

#4

投稿記事 by CHAMA » 14年前

書き込みありがとうございます
フォーラムルールは一応読んでました;

コード:

って書かないとダメなんですね
誤解してました;
以後気をつけます

通りすがりの名無しさんのおかげで
解決しました
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る