- ベストアンサー
Perlでsprintf("%02d",$mont
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
この質問perl関係ないですよ。 %02d = 先頭を0で埋めたdecimalの先頭文字d=10進数 で、その後ろの変数を取り込めって書いてるだけで、 C言語やPHPなどでも、共通です。 例として、変数が4のとき %d =「4」 %2d =「 4」先頭にスペースが入る %02d =「04」 %08d =「00000004」 などです。
関連するQ&A
- Perlのsprintfで使われるフォーマット書式について
Perlのsprintfで使われるフォーマット書式で例えば、 100.15という値があり、 [ 100.1500]と表示させたい場合、 %f11.4で良いのでしょうか?
- ベストアンサー
- Perl
- sprintf の使い方について
C 言語の超初心者につき,おろかな質問をお許しください。 sprintf 関数について char str[40]; sprintf(str, "hogehoge %d", hoge_int); という文法はよく目にするのですが char *str; sprintf(str, "hogehoge %d", hoge_int); という文法はあまり見たことがありません。 両方ともちゃんと動くのですが,後者は文法的に正しいのでしょうか? char str[40] とした場合でも char *str とした場合でも, str は文字列の最初の文字のアドレスを表すんだったと思うんですが。 違いが分からず,混乱しています。 初心者につき,間抜けな質問をしているかもしれませんが,ご教授くださると幸いです。
- ベストアンサー
- C・C++・C#
- sprintfで0ならスペースにしたい
お世話になります。 sprintfを使って編集しています。 3桁で統一したいため、 $trm01 = sprintf("%3d",$trm01); のようにやっています。 $trm01が0の場合、3桁のスペースとしたいのですが。 宜しくお願いします。
- ベストアンサー
- Perl
- sprintf関数について教えて下さい。
sprintf関数について教えて下さい。 #include <stdio.h> int main(void) { int i; char ns[20][6]; for (i = 0; i < 20; i++) sprintf(ns[i], "No.%02d", i + 1); for (i = 0; i < 2; i++) printf("%s\n", ns[i]); return 0; } 上のプログラムでは結果が No.01 No.02 (中略) No.19 No.20 ですが、sprintf関数内の書式指定を"No.%02d\n"に変更した場合、 結果が No.01 No.02 (中略) No.19 No.20 No.02 No.03 (中略) No.19 No.20 No.03 No.04 (中略) No.19 No.20 (中略) No.19 No.20 No.20 になります。 どうしてこのようなことが起きてしまうのか自分では説明できません。 sprintf関数の説明も読んで納得はしたのですが 上のようになることがわかりません。 長々と書いてしまいましたが よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- \0 sprintf( ) strcat( )
#include <iostream.h> main(){ char color_r[12], color_g[3], color_b[3]; sprintf(color_b, "%d", 123); sprintf(color_g, "%d", 456); sprintf(color_r, "%d", 789); strcat(color_r,","); strcat(color_r,color_g); strcat(color_r,","); strcat(color_r,color_b); cout << color_r; printf("\n%s",color_r[11]); } 結果は 789,456,123 (null) 問題ない。 でも、Winプログラムだと問題がある。 #include <windows.h> #include <iostream.h> 。。。 case WM_PAINT: hdc = BeginPaint(hWnd, &ps); char color_r[12], color_g[3], color_b[3]; sprintf(color_b, "%d", 123); sprintf(color_g, "%d", 456); sprintf(color_r, "%d", 789); strcat(color_r,","); strcat(color_r,color_g); strcat(color_r,","); strcat(color_r,color_b); TextOut(hdc,10,10,color_r,strlen(color_r)); EndPaint(hWnd, &ps); break; 結果は、実行時エラーです。 えらーだけど、TextOut( ) での表示が 789,456,123456 となっているのは見れる。 456 というのがくっく。 これが問題。 char color_r[12], color_g[4], color_b[4]; として \0 の領域を用意してやれば問題は起こらないけど、 [4] にしたとして、\0 がどのように作用しているのかが 分かりません。 [3] のエラーは strcat(color_r,color_b); の次に strcat(color_r,"\0"); を書けばいいような気がしてやってみたけど、 結果は変わらず、実行時エラー。 やっていることは GetPixel( ) の3色分離だけど、 配列の \0 をケチって宣言すると、 R,G,B が、R,G,BG となってしまうことが分かったけど どうして R,G,BG になるのかを知りたいです。
- ベストアンサー
- C・C++・C#
- CGIについて(時間表示)
CGI初心者ですが、掲示板を作成中です。投稿するたびにメッセージの投稿時間がすべて現在時刻に書き換わります。 メッセージ毎に時間表示させたいのですが、いかのプログラムのどこを変更すればよいのでしょうか?宜しくお願いいたします。 # 時間処理 sub totime { ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time); $year +=1900; $month++; $year = sprintf("%04d", $year); $month = sprintf("%02d", $month); $mday = sprintf("%02d", $mday); $hour = sprintf("%02d", $hour); $min = sprintf("%02d", $min); $sec = sprintf("%02d", $sec); $date = "$month/$mday $hour:$sec"; }
- ベストアンサー
- CGI
- どうしてそうなるのかわからない
perlでカレンダーを出力したいと思い検索すると下記のページがヒットしました Calendar::Simple - シンプルなカレンダーを作る為のPerl拡張 http://perldoc.jp/docs/modules/Calendar-Simple-1.07/Simple.pod このページにCalendar::Simpleを使ったサンプルが提示されているのですが、その動作が理解できません。最後の部分なのですが foreach (@month) { print map { $_ ? sprintf "%2d ", $_ : ' ' } @$_; print "\n"; } @$_というのがわかりません。手元のポケットリファレンスには載っていませんでした。@$_はここでは@monthのことを指しているのでしょうか? とすると、まず@monthから一個要素を取り出して、そこに値が存在すればsprintfするということでよいでしょうか? もうひとつあります。@monthの中に何が入っているのか調べようと、 print @month[1]; とすると ARRAY(0x1afe81c)ARRAY(0x1afea20)ARRAY(0x1afe81c)ARRAY(0x1afea20)ARRAY(0x1afe81c) と意味不明な文字列が出力されます。これはどういうことなのでしょうか? よろしくお願いします。
- ベストアンサー
- Perl
- Perlのスクリプトで意味が分かりません
for ( 1..$winfo{'LIMIT'} ) { my ( $wkey ) = sprintf( "%03d",$_ ); $wnum{ $wkey } = sprintf( "%s名",$_ ); } とあるのですが、forの括弧の中が、普通と違うので意味が分かりません。 どのような意味になるのでしょうか。 宜しくお願い致します。
- ベストアンサー
- Perl
- sprintfのような関数を自作する
表題のようにsprintfのような関数を自作することはできますか? 行いたいのは、例えば、 void TestKansu(AnsiString str) { //str文字列を処理 } という関数を用意したとしてこれを使うには AnsiString str; str.sprintf("TestMessage %d" , tes); TestKansu(str); としなくてはいけないと思いますが、もっと簡潔に TestKansu("TestMessage %d" , tes); とできるような関数を自作することは可能ですか? C++です。 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
お礼
ありがとうございます^_^