ページ 11

龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 11:49
by F91
はじめまして、初投稿ですがよろしくお願いします。

C言語に関しては初心者で、龍神録を使って勉強中なのですが15章で、実行しても画面が出て右上に「read erorr」とでます。

自機の方は、動かせますが、敵キャラが出現せず、弾幕も発射されません。


エクセルデータの挿入で何かミスがあったのかと思って11章などを見直してみましたが、どうもわかりません。

申し訳ありませんがどうか教えてください。

ちなみにやった作業はdat内のcsvに15章と新たにファイルを作ってDLしたエクセルファイルを入れただけです。
プログラム等は、原型を弄ったりしてないです。。

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 12:05
by Rittai_3D
開発環境は何でしょうか?

パスは間違えてないのでしょうか?

ログに何か出ていますか?
オフトピック
個人的に
F91 さんが書きました:ちなみにやった作業はdat内のcsvに15章と新たにファイルを作ってDLしたエクセルファイルを入れただけです。
プログラム等は、原型を弄ったりしてないです。。
が気になります。恐らく、パスが間違えていると思います。取り敢えず、ログとその部分のコードを
貼って下さい。

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 12:12
by F91
開発環境はVisual Studio 2008です。

ログはこんな感じです。
0:システムの情報を出力します
15: DXライブラリ Ver3.04d
31: 論理プロセッサの数 : 2
62: OS Windows7 ( Build 7600 )
178: CPU動作速度:大体2.69GHz
190: MMX命令を使用します
201: SSE命令が使用可能です
213: SSE2命令が使用可能です
223: CPUベンダ:GenuineIntel
282: CPU名:Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
304:COMの初期化... 成功しました
352:メモリ総量:3573.29MB 空きメモリ領域:2278.36MB
364:タイマーの精度を検査します
375:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
386: パフォーマンスカウンターを使用します タイマー分解能 : 2922.734000 KHz
409: ソフトの二重起動検査... 二重起動はされていませんでした
445:ウインドウクラスを登録します... 登録に成功しました
468:ウインドウモード起動用のウインドウを作成します
559:ウインドウの作成に成功しました
793:IMEを無効にしました
870:ウインドウスタイルをウインドウモード用に変更します... 完了
904:DirectInput関係初期化処理
916: DirectInput7 の取得中... 成功
1012: 引き続き初期化処理... 初期化成功
1035: ジョイパッドの初期化...
1049: ジョイパッドの初期化は正常に終了しました
1060: マウスデバイスの初期化... 初期化成功
1082: キーボードデバイスの初期化... 初期化成功
1116:DirectInput 関連の初期化は正常に終了しました
1127:DirectSound の初期化を行います
1138:DirectSound インターフェースの取得を行います.... 成功
1178:引き続きインターフェースの初期化処理... 成功
1295: DirectSound デバイスを列挙します
1308: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
1320: モジュール名:{0.0.0.00000000}.{55d31c03-e87d-4ca2-a6c4-9fe21607b7b6} ドライバ記述:スピーカー (Realtek High Definition Audio)
1331: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
1343: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

1355: 利用可能サンプリング精度
1367: プライマリ 16bit = OK 8bit = OK



とりあえず、この関数をコピペします。

//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
int n,num,i,fp;
char fname[32]={"../dat/csv/storyH0.csv"};
int input[64];
char inputc[64];

fp = FileRead_open(fname);//ファイル読み込み
if(fp == NULL){
printfDx("read error\n");
return;
}
for(i=0;i<2;i++)//最初の2行読み飛ばす
while(FileRead_getc(fp)!='\n');

n=0 , num=0;
while(1){
for(i=0;i<64;i++){
inputc=input=FileRead_getc(fp);//1文字取得する
if(inputc=='/'){//スラッシュがあれば
while(FileRead_getc(fp)!='\n');//改行までループ
i=-1;//カウンタを最初に戻して
continue;
}
if(input==',' || input=='\n'){//カンマか改行なら
inputc='\0';//そこまでを文字列とし
break;
}
if(input==EOF){//ファイルの終わりなら
goto EXFILE;//終了
}
}
switch(num){
case 0: enemy_order[n].cnt =atoi(inputc);break;
case 1: enemy_order[n].pattern =atoi(inputc);break;
case 2: enemy_order[n].knd =atoi(inputc);break;
case 3: enemy_order[n].x =atof(inputc);break;
case 4: enemy_order[n].y =atof(inputc);break;
case 5: enemy_order[n].sp =atof(inputc);break;
case 6: enemy_order[n].bltime =atoi(inputc);break;
case 7: enemy_order[n].blknd =atoi(inputc);break;
case 8: enemy_order[n].col =atoi(inputc);break;
case 9: enemy_order[n].hp =atoi(inputc);break;
case 10:enemy_order[n].blknd2 =atoi(inputc);break;
case 11:enemy_order[n].wait =atoi(inputc);break;
case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
}
num++;
if(num==18){
num=0;
n++;
}
}
EXFILE:
FileRead_close(fp);

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 12:24
by Rittai_3D
コードを貼る場合、コードタグを使用して下さい。

フォーラムルールをお読みください。
F91 さんが書きました: ログはこんな感じです。

コード:

0:システムの情報を出力します
15:	DXライブラリ Ver3.04d
31:	論理プロセッサの数 : 2
62:	OS  Windows7 ( Build 7600  )
178:	CPU動作速度:大体2.69GHz
190:	MMX命令を使用します
201:	SSE命令が使用可能です
213:	SSE2命令が使用可能です
223:	CPUベンダ:GenuineIntel
282:	CPU名:Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz
304:COMの初期化... 成功しました
352:メモリ総量:3573.29MB  空きメモリ領域:2278.36MB 
364:タイマーの精度を検査します
375:精度結果 更新回数 マルチメディアタイマー:0  パフォーマンスカウンター:60
386: パフォーマンスカウンターを使用します タイマー分解能 : 2922.734000 KHz 
409: ソフトの二重起動検査... 二重起動はされていませんでした
445:ウインドウクラスを登録します... 登録に成功しました
468:ウインドウモード起動用のウインドウを作成します
559:ウインドウの作成に成功しました
793:IMEを無効にしました
870:ウインドウスタイルをウインドウモード用に変更します... 完了
904:DirectInput関係初期化処理
916:	DirectInput7 の取得中... 成功
1012:		引き続き初期化処理... 初期化成功
1035:	ジョイパッドの初期化... 
1049:	ジョイパッドの初期化は正常に終了しました
1060:	マウスデバイスの初期化... 初期化成功
1082:	キーボードデバイスの初期化... 初期化成功
1116:DirectInput 関連の初期化は正常に終了しました
1127:DirectSound の初期化を行います
1138:DirectSound インターフェースの取得を行います....  成功
1178:引き続きインターフェースの初期化処理...  成功
1295:	DirectSound デバイスを列挙します
1308:		モジュール名:                 ドライバ記述:プライマリ サウンド ドライバー 
1320:		モジュール名:{0.0.0.00000000}.{55d31c03-e87d-4ca2-a6c4-9fe21607b7b6}  ドライバ記述:スピーカー (Realtek High Definition Audio) 
1331:	最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 
1343:	総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 

1355:	利用可能サンプリング精度
1367:	 プライマリ 16bit = OK  8bit = OK 

コード:

//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
	int n,num,i,fp;
	char fname[32]={"../dat/csv/storyH0.csv"};
	int input[64];
	char inputc[64];

	fp = FileRead_open(fname);//ファイル読み込み
	if(fp == NULL){
		printfDx("read error\n");
		return;
	}
	for(i=0;i<2;i++)//最初の2行読み飛ばす
		while(FileRead_getc(fp)!='\n');

	n=0 , num=0;
	while(1){
		for(i=0;i<64;i++){
			inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
			if(inputc[i]=='/'){//スラッシュがあれば
				while(FileRead_getc(fp)!='\n');//改行までループ
				i=-1;//カウンタを最初に戻して
				continue;
			}
			if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
				inputc[i]='\0';//そこまでを文字列とし
				break;
			}
			if(input[i]==EOF){//ファイルの終わりなら
				goto EXFILE;//終了
			}
		}
		switch(num){
			case 0:	enemy_order[n].cnt		=atoi(inputc);break;
			case 1:	enemy_order[n].pattern	=atoi(inputc);break;
			case 2:	enemy_order[n].knd		=atoi(inputc);break;
			case 3:	enemy_order[n].x		=atof(inputc);break;
			case 4:	enemy_order[n].y		=atof(inputc);break;
			case 5:	enemy_order[n].sp		=atof(inputc);break;
			case 6:	enemy_order[n].bltime	=atoi(inputc);break;
			case 7:	enemy_order[n].blknd	=atoi(inputc);break;
			case 8:	enemy_order[n].col		=atoi(inputc);break;
			case 9:	enemy_order[n].hp		=atoi(inputc);break;
			case 10:enemy_order[n].blknd2	=atoi(inputc);break;
			case 11:enemy_order[n].wait		=atoi(inputc);break;
			case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
			case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
			case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
			case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
			case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
			case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
		}
		num++;
		if(num==18){
			num=0;
			n++;
		}
	}
EXFILE:
	FileRead_close(fp);
このコードを見ますと、read errorが出るのはcavファイルが

コード:

char fname[32]={"../dat/csv/storyH0.csv"};
に存在していない為です。質問ですが、csvファイルの名前はあっていますか?

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 12:35
by F91
どうもすみません、ルールの方をしっかり読んでませんでした。


確認してみましたが、storyH0でした。

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 12:40
by みけCAT
storyH0.csvというファイルは、正しいディレクトリに配置されていますか?
すなわち、exeファイルのカレントディレクトリの1個上のディレクトリにあるdatディレクトリの中のcsvディレクトリの中にありますか?

そのstoryH0.csvの読み込み権限はありますか?
例えば、storyH0.csvをメモ帳にドロップした場合、読み込めますか?

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 13:00
by F91
申し訳ありません。

何分、C言語については初心者なまま、この世界に入ってきましたから

ちょっとなにをすればいいのかわからないです。
オフトピック
by みけCAT » 2013年9月24日(火) 12:40

storyH0.csvというファイルは、正しいディレクトリに配置されていますか?
すなわち、exeファイルのカレントディレクトリの1個上のディレクトリにあるdatディレクトリの中のcsvディレクトリの中にありますか?

そのstoryH0.csvの読み込み権限はありますか?
例えば、storyH0.csvをメモ帳にドロップした場合、読み込めますか?
本当に浅学で申し訳ないのですが、よければ書いてあることの意味も含めて教えてください。

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 14:37
by usao
C言語がどうのという話ではなく,単にファイルパス(ファイルのありか)の話ですよ.

ソースコード内で,プログラムが読み込むべきファイルのパスとして
"../dat/csv/storyH0.csv"
という指定しているわけですから,当然その場所にその名前のファイルが無いと読み込めないわけです.
すなわち,プログラム実行時には,

 (プログラムが当該ファイルロード処理に差し掛かった時点での)カレントディレクトリからの相対パスで ../dat/csv/ となるフォルダに
 storyH0.csv という名前のファイルが存在する

という状態を用意してあげなければならないということです.
で,「そのような状態になってないからファイル読込エラーになってるんじゃないの?」 という予想から
>storyH0.csvというファイルは、正しいディレクトリに配置されていますか?
>すなわち、exeファイルのカレントディレクトリの1個上のディレクトリにあるdatディレクトリの中のcsvディレクトリの中にありますか?
のように訊かれているわけですね.


・エクスプローラであなたのexeが存在するフォルダを開く
・その1個上のフォルダに行く
・そこに dat というフォルダがあるか? →無いなら作る
・datフォルダ内に入る
・そこに csv というフォルダがあるか? →無いなら作る
・csvフォルダ内に入る
・そこに storyH0.csv があるか? → 無いなら現在有る場所から持ってきて入れる → これで状況が打開されるかどうか?

ということをやってみましょう.


あと,少なくともコレ↓は確かめられると思いますし.
>そのstoryH0.csvの読み込み権限はありますか?
>例えば、storyH0.csvをメモ帳にドロップした場合、読み込めますか?

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 16:23
by F91
オフトピック
C言語がどうのという話ではなく,単にファイルパス(ファイルのありか)の話ですよ.

ソースコード内で,プログラムが読み込むべきファイルのパスとして
"../dat/csv/storyH0.csv"
という指定しているわけですから,当然その場所にその名前のファイルが無いと読み込めないわけです.
すなわち,プログラム実行時には,

 (プログラムが当該ファイルロード処理に差し掛かった時点での)カレントディレクトリからの相対パスで ../dat/csv/ となるフォルダに
 storyH0.csv という名前のファイルが存在する

という状態を用意してあげなければならないということです.
で,「そのような状態になってないからファイル読込エラーになってるんじゃないの?」 という予想から
>storyH0.csvというファイルは、正しいディレクトリに配置されていますか?
>すなわち、exeファイルのカレントディレクトリの1個上のディレクトリにあるdatディレクトリの中のcsvディレクトリの中にありますか?
のように訊かれているわけですね.
ここまではなんども読み返して何となくわかりました。

それでexeファイルが入っている場所を探すとDebugファイルの中に
「RyuJin.exe.embed.manifest」
「RyuJin.exe.embed.manifest.res」
「RyuJin.exe.intermediate.manifest」とありました。

これでしょうか?

また読み込み権限についてですが
試しにすでにクリアした14章でエクセルデータをテキストドキュメントでstoryH0.csvと名打って実行したところ
15章と同じ現象が起きました。

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 18:16
by usao
exeファイル名はおそらく RyuJin.exe だと思われ,Debugフォルダ内にできていると思うのですが,ありませんか?
storyH0.csvというファイルはとりあえず(そのプログラムが読むための正しい内容で)存在しているのですよね?

例えば
char fname[32]={"../dat/csv/storyH0.csv"};
これを↓仮にこう変えて
char fname[32]={"storyH0.csv"};

Debugフォルダ内にstoryH0.csvをコピーしてみてもダメですか?
オフトピック
何章がどうのという話はよくわからんので その辺把握している方におまかせ

Re: 龍神録15章でつまづきました・・

Posted: 2013年9月24日(火) 19:59
by Tatu
F91 さんが書きました:ちなみにやった作業はdat内のcsvに15章と新たにファイルを作ってDLしたエクセルファイルを入れただけです。
プログラム等は、原型を弄ったりしてないです。。
それならば

load.cppの

コード:

	char fname[32]={"../dat/csv/storyH0.csv"};

コード:

	char fname[32]={"../dat/csv/15章/storyH0.csv"};
に変えてはどうでしょうか?

Re: 龍神録15章でつまづきました・・

Posted: 2013年10月01日(火) 12:39
by F91
諸事情により返信が遅れてしまいすみませんでした。

Tatuさんの言われたとおりにやってみたところ、プログラムがちゃんと起動しました!

パスの位置が不明だったから、プログラムが認識できずにエラーを起こしてたんですね。

みなさんどうも、ありがとうございました。

また、なにか詰まったときには、お邪魔させていただきますのでよろしくお願いします。
オフトピック
しかしいまだにわからないことがあります。
それはexeファイルの所在です。

Debugフォルダを見ても、RyuJin.exeと書かれたファイルはなく、RyuJinのファイル名でアプリケーションやIncremental Linker File、 Program Debug Databaseといったファイルがあるだけで、どれがどれだかまったく見当がつかないです。
もしお暇がありましたら、お教えください。 

Re: 龍神録15章でつまづきました・・

Posted: 2013年10月01日(火) 17:05
by Tatu
RyuJinというファイルでアプリケーションと書かれているのがRyuJin.exeです。
拡張子の.exeが省略されているためRyuJinと表示されているのでしょう。

F91さんが使っているパソコンのフォルダーオプションで
拡張子の表示に関する設定を調べてみてください。

Re: 龍神録15章でつまづきました・・

Posted: 2013年10月23日(水) 16:00
by F91
助言のとおり調べてみたところ、実行ファイルが出てきました。

なるほど、実行ファイルとはアプリケーションとかのことなんですね

勉強になりました。

Tatuさんありがとうございます。

Re: 龍神録15章でつまづきました・・

Posted: 2013年10月23日(水) 16:05
by softya(ソフト屋)
セキュリティ的にも拡張子は表示したほうが良いですよ。
プログラムする人が拡張子を見られないのは色々と失敗する原因にもなります。

「ファイルの拡張子を表示する|Windows 7 (ウィンドウズ 7)|Microsoft atLife TIPS アーカイブ」
http://www.microsoft.com/ja-jp/atlife/t ... s/252.aspx