トップページ > 過去ログ > 記事閲覧
可変引数を対応した文章を表示する関数を作るには
名前:山風 日時: 2013/03/19 21:46

d_mes(1,1,"文章表示"); と記述することで座標(1,1)に 文章表示 と出る関数を作ったのですが、 これをさらにd_mes(1,1,"HP=%d",hp);と書けば HP=31 という感じに引数も反映する様にしたいのですが、 どの様にすればいいでしょうか? ↓最初のソースコード void d_mes(int x,int y,char *str){ int Cr0 = GetColor( 0 , 0 , 0 ); DrawFormatString( x+1, y+1, Cr0, "%s", str ) ; DrawFormatString( x, y, Cr, "%s", str ) ; } まずは次の通りにしました、 void d_mes(int x,int y,char *str,...){ int Cr0 = GetColor( 0 , 0 , 0 ); DrawFormatString( x+1, y+1, Cr0, "%s", str ) ; DrawFormatString( x, y, Cr, "%s", str ) ; } 当然ながらも、これだと d_mes(1,1,"HP=%d",hp); とやった場合、画面には HP=%d と表示されてしまいます

Page: 1 |

Re: 可変引数を対応した文章を表示する関数を作るには ( No.1 )
名前:いっち 日時:2013/03/20 02:55

va_arg や va_list をキーワードに検索すれば情報が得られると思います。
Re: 可変引数を対応した文章を表示する関数を作るには ( No.2 )
名前:いっち 日時:2013/03/20 19:40

と、思ったのですが、よく考えたら DrawFormatString には printf に対する vprintf のような関数がないようですので、 管理人さんにお願いして作っていただいたほうが良いかもしれません。 (現状、DrawFormatString も内部的には vsprintf を呼んでいるだけです)
Re: 可変引数を対応した文章を表示する関数を作るには ( No.3 )
名前:山風 日時:2013/03/21 03:16

なるほど……、 現状としては全部バーっと表示するのでなく 1文字1文字を判定しながら表示する形式がいちばんそうですね。 \があって{}で囲まれてるのがあったら[]の中身を変数として表示、みたいな感じにして いっちさんありがとうございました!
Re: 可変引数を対応した文章を表示する関数を作るには ( No.4 )
名前:Will 日時:2013/03/21 11:27

以下でいいと思いますけど。(自作ラッパの簡易版) void MyDrawString( IN int x, IN int y, IN int Cr, IN char* fmt, // 書式 ... ) { char sBuff[1024]; va_list args; va_start(args, fmt); vsprintf(sBuff, fmt, args); DrawString(x, y, sBuff, Cr); va_end(args); }
Re: 可変引数を対応した文章を表示する関数を作るには ( No.5 )
名前:いっち 日時:2013/03/21 22:15

Willさん> > 以下でいいと思いますけど。(自作ラッパの簡易版) そうですね。 (No.2) のレスは DrawFormatString や printfDX の内部で何がしかの細工が行われる事もありえると思い提案させて頂きました。

Page: 1 |