Re: ファイルの読み込み ( No.1 ) |
- 名前:Will 日時:2007/03/03 11:00
//マップデータを一文字ずつ読み取って数値型にかえる
mapdata[y * worldmapwidth + x] = atoi(&buffermapdata[x]);
この部分が間違いです。
atoiは文字列を数値に変換する関数なので、上記のコーディングでは"1111111111"と読み込んだ文字列の先頭文字だけを数値に変換することはできません。
マップの種類データの値として、0〜9までしか使用しないのであれば
mapdata[y * worldmapwidth + x] = buffermapdata[x] - '0';
で、DXさんの望む処理ができると思います。
|
Re: ファイルの読み込み ( No.2 ) |
- 名前:DX 日時:2007/03/03 12:32
ありがとうございますできました
でも
FileRead_gets(buffermapdata,worldmapwidth,maphandle);
の部分なんですが
これは1行ずつ読み取る関数だと思いますけど
FileRead_gets(buffermapdata,worldmapwidth+3,maphandle);
のようにworldmapwidthは横の数ですけど
これに3を足すと正しいマップで表示されます
どうして横のマップの数より数字を大きくしないと
マップがうまく表示されないのかがわかないんですけどわかるかたお願いします!!
|
Re: ファイルの読み込み ( No.3 ) |
- 名前:Will 日時:2007/03/05 09:24
●管理人さんへ
FileRead_gets関数の仕様について2点質問があります。
質問1
バッファサイズを10と指定した場合、FileRead_getsがファイルから何文字リードしますか?
(リファレンスの「〜Num で指定されたサイズを越える位置まで〜」、
から11文字リードするように思うのですが、その場合11文字目はどこにセットされるのだろう?)
質問2
1行の文字数がバッファサイズよりも多い場合、残った文字列は読み捨てして、ファイルポインタは次の行に移動しているのですか?
それとも、リード後の位置で止まっているのでしょうか?
●DXさんへ
マップリード後のmapdataの中のデータを貼り付けてもらえませんか?
それを見れば、もう少し詳しく原因が調査できると思います。
|
Re: ファイルの読み込み ( No.4 ) |
- 名前:wiz 日時:2007/03/05 14:39
>FileRead_gets(buffermapdata,worldmapwidth,maphandle);
この関数は、バッファ領域を十分とってから使用することを
前提としているので、上記のような渡すバッファと
そのサイズが違っている場合などに問題があるのでは無いでしょうか?
今回の場合だと渡すバッファよりサイズのほうが小さく指定されますが、
+3するとバッファよりサイズのほうが大きくなります。
少し内容が違う過去ログですが、
管理人さんの返信があります。
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=50
|
Re: ファイルの読み込み ( No.5 ) |
- 名前:管理人 日時:2007/03/06 15:06
> DXさん
FileRead_gets 関数の第二引数に渡す値に関しては wizさんが示された
スレッドの通りです。分かりにくかったのでリファレンスの説明を修正+追加
しておきました。
> Willさん
質問1
9バイト分リードします。(9バイト中に全角文字が含まれている可能性も
ありますのであくまで9「バイト」です)
質問2
リード後の位置で止まっています。
FileRead_gets 関数の動作の詳細をリファレンスの説明に書き加えましたので、
宜しければご覧になってみてください。m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R19N8
|
Re: ファイルの読み込み ( No.6 ) |
- 名前:Will 日時:2007/03/07 08:51
●管理人さんへ
質問へのご回答、及びリファレンスの修正ありがとうございます。
FileRead_gets 関数の仕様が正しく理解できました。
●DXさんへ
修正後のリファレンスに今回の問題の原因が書かれていますので、そちらを参照してください。
|