%d出力変換指定子をつかってprintf関数の引数として書き込まれた整数値を文字列に格納してprintf出力表示してみよう 

ぶーにゃん 「にゃおーん(~^^~)」


背中を地面にこすりつけ転げまわる猫。


マックス 「ふふふ、 ならこれはどうだ。


#include <stdio.h>


int main(void)

{

printf("%d,%d,%d\n",10,101,1001);

return 0;

}


マックス 「ふふふ、左の" "内の%dも


引数である10,101,1001もコンマで区切ってある。


コンピューターはこのまぎらわしい表記にたえられるかな・・・


ふふふふふ」


マックス 「それっぷよぷよ」



プログラムを実行します。



マックス 「おおっつ。」


10,101,1001

続行するには何かキーをおしてください. . ._


マックス 「ちゃんと表示されている。すばらしい。」


ソーラー「もう1回説明してみます。


printf("%dと%dと%d",10,101,1001);


は実行されると


プログラムの実行結果


10と101と1001


と表示されるように右辺の引数である10,101,1001が


左の" "内の左の%dから順番に代入されていることがわかります。


そして この右辺の 10と101と1001はデータ計算処理可能な


半角英数字で打ち込んである必要があります。


全角文字では 数値と認識されません。


。。。。。。。。。。。。。。。。。。。。。。。。。。。。

ちょっと お菓子でも食べながら


おしゃべりターイムの時間です


みなさん、


数値や文字はコンピューターの記憶装置(メモリー)に


データとして格納されないことにご注意くださいね。


なんのこと?


と思われましたか(*^_^*)/


printf関数など、関数の引数となっている文字列データや数値データは


コンピュータのメモリに格納される仕組みとなっています。


がっ


プログラムは🌞コンパイルされ実行されなければ🌞


何もコンピュータによって実行されません。


ですので


プログラムが🌞コンパイルされ実行🌞されてはじめて


数値データはコンピューターのメモリに格納されていきます。


プログラムが🌞コンパイルされ実行🌞されると


まずは


10 101 1001はint型という計算処理可能な領域(メモリ)に


『数値データ』として格納されます。


その後 %d出力変換指定子をつかって文字列に格納され


コマンドプロンプト画面にprintf出力表示されます。


。。。。。。。。。。。。。。。。。。。。


マックス「おおっ」


ソーラー 「ですから


printf関数で数値を出力表示したい場合は


printf("%d",10);のようにコンマの右側に数値10を


そして


その10を


とりこむ%dを


"    "のなかにかきこめばよいわけです。


さらにその際、


printf("プリティは%d円ひろったなり。",10);


と記述してあっても%dとまわりの文字は影響しあいません。


コンパイルすれば


プリティは10円ひろったなり。


となり 見事に%dの


部分だったところに数値10が


綺麗にとりこまれていきます。


このように


最終的に


printf関数によって数値10は 文字列に取り込まれ


出力表示されています。」


ソーラー 「はあっはあっ」


マックス 「ソーラー青春してる。がんばれ!!」


ぶーにゃん 「ニャーン。。。(^^)。。。」


ひたすら地面をころがりまくる猫。


ソーラー 「はあっ、はあっ おほん。


さらに


printf("%dは%dとなかよしで山に芝刈りに%dと%dと%dは川に洗濯にいきました。",5,7,101,4,0);


をよくごらんください。" "でかこまれた左辺には


%d出力変換指定子は5個、右辺には5,7,101,4,0の5つの数値


まあ、当然ですが出力したい数値が5個なら


%dも5個必要なわけです。


はあ^^^^^^^^     快感。」



マックス「じゃあ


printf("%dは%dとなかよしで山に芝刈りに%dと%dは川に洗濯にいきました。",5,7,101,4,0);


のように


" "でかこまれた左辺には


%d出力変換指定子は4個、右辺には5,7,101,4,0の5つの数値が記述されていたなら


printf("%dは%dとなかよしで山に芝刈りに%dと%dは川に洗濯にいきました。",5,7,101,4,0);


の実行結果はどうなるんだ?」


ソーラー「えへっ


その場合は


5は7となかよしで山に芝刈りに101と4は川に洗濯にいきました。

C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 12828) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...


が表示されることになります


4つの%dに5,7,101,4が格納されたなら


余った数値データ0


は表示されないんだね」


マックス「では


printf("%dは%dとなかよしで山に芝刈りに%dと%dと%dは川に洗濯にいきました。",5,7,101,4);


のように


" "でかこまれた左辺には


%d出力変換指定子は5個、右辺には5,7,101,4の4つの数値が記述されていたなら


printf("%dは%dとなかよしで山に芝刈りに%dと%dと%dは川に洗濯にいきました。",5,7,101,4);

の実行結果はどうなるんだ?」


ソーラー「えへっ


その場合は



プログラムの実行結果


5は7となかよしで山に芝刈りに101と4と9703459は川に洗濯にいきました。

C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 11312) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...


が表示されることになります


4つの%dに5,7,101,4が格納されたなら


残った%dには代入される数値データはありません


その場合は


プログラムの実行結果のように


なんだか不特定の値


9703459(コンピュータの使用状況によって異なる値が表示されることになります)


が表示されます




おまけ解説


ちょっと先のエピソードの内容になるのですが


なぜこのような現象がおきるのかというと


5つの%d


はそれぞれ

あるメモリを管理しています



4つの%dに5,7,101,4が格納されるということは


4つの%dが管理しているメモリに5,7,101,4が格納されるということなんです


すると残った1つの%dが管理しているメモリには代入される数値データはないことになります


ですが


実は


5つの%d


が管理しているメモリにはなにがしかのデータが元から存在しています


ですから


残った1つの%dが管理しているメモリに数値データが代入されなくても


残った1つの%dが管理しているメモリにはなにがしかのデータが元から存在しています


そのデータが9703459だったというわけです


ですから


printf("%dは%dとなかよしで山に芝刈りに%dと%dと%dは川に洗濯にいきました。",5,7,101,4);

の実行結果は


5は7となかよしで山に芝刈りに101と4と9703459は川に洗濯にいきました。


のように表示されたわけですね

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る