天国にいけるC言語入門 シーズン1 パソコン超初心者がゼロから東方風シューティングをつくる編 ver.0.4.15.789 RELIEF
%d出力変換指定子をつかってprintf関数の引数として書き込まれた整数値を文字列に格納してprintf出力表示してみよう
%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は川に洗濯にいきました。
のように表示されたわけですね
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます