この章から基本的なC言語の内容について知識を深めていきましょう! 今回はプロジェクト「0020_keisan」で簡単な計算をして、結果を表示するプログラムを作ってみましょう。
まずは変数を使わずに、計算結果を表示するプログラムを書いてみましょう。 ここではプログラムは別のプロジェクト「0020_keisan」を作成しています。必要に応じて 作ってみて ください。
#include <stdio.h>
int main( void )
{
printf("村人A:あなたのレベルは「%d」なんですか!\n", 5);
printf("村人A:レベル「%d」ともなれば、\n", 5);
printf(" 凡人とはやっぱりちがいますよね。\n");
printf("村人A:なんかオーラというか、そういうの。\n");
printf("村人A:レベル「%d」だと体力も「%d」もあるんですね。\n", 5, 5 * 100 );
}
実行するとしたのような結果が出てくると思います。
※今回の村人はこんな感じの老人をイメージして書いてました。↓
関数はいままですでにお話したものだけで、新しいものは登場していませんね。前の記事までと同様、main()関数の中身(記号「{」から記号「}」までの間)は5個のprintf関数を呼ぶ命令だけで作られています。
といいつつ重要ですので、 printf 関数を読んでいるコマンド一行を復習として細かくみてみましょう。
ただ、printf関数を使うときの引数(ひきすう)の数が1個ではなく、2個のもの、3個ものがあること。
「%d」という特殊な役割をする 2 文字の組み合わせが何個か入っていること、などの違いがあります。
一行ごとに確認していきましょう!
まず最初の printf 関数から見ていきましょう。
printf("村人A:あなたのレベルは「%d」なんですか!\n", 5);
この関数で「村人A:あなたのレベルは「5」なんですか!」+改行 の文字表示が行われています。
%d が数字の 5 に置き換わっていることがわかるかと思います。
この %d という2文字は 変換指定子と呼ばれていて、 2個目以降の引数に書いた整数の値(データ)を文字として変換して表示してくれる機能 があります。
printf 関数は 「printf(引数1個目, 引数2個目, 引数3個目, …)」といった複数の引数を渡すことができる関数 です。
前回までは引数1個目に文字列のみを書いていました。
引数1個目に文字列を書き、その文字列の一部に変換指定子(「%d」みたいな特殊な文字)を書くと、最初に登場する %d は引数1個目の内容に変換、2回目に登録する %d は引数2個目の内容に変換、3回目に登場する %d は引数3個目の内容に変換、4回目(以下略)
という機能を持っています。
こういったデータを文字に変換してくれる機能をもたせた文字列の部分を書式指定文字列と呼びます。
例として引数を3つ使った printf 関数の変換を図にてしてみて整理してみます。
この状態で実行すると、「レベルは10、体力は100」と表示されます。
一つ目の引数で書いている文字列の中で、左から登場する順番で引数2番目、3番目…と、変換する値を決めています。ですので、最初の「%d」は、引数2番目の「10」に変換され、次の「%d」は引数3番目の「200」に変換されて表示されています。
続きのKeisan.c のソースコードを確認していきましょう。
printf("村人A:レベル「%d」ともなれば、\n", 5);
printf(" 凡人とはやっぱりちがいますよね。\n");
printf("村人A:なんかオーラというか、そういうの。\n");
printf("村人A:レベル「%d」だと体力も「%d」もあるんですね。\n", 5, 5 * 100 );
5行目のprintf関数も4行目のprintf関数と同じく、引数を2つ設定しており、文字列の中の「%d」2個目の引数のレベルの値「5」表示しています。
6行目と7行目のprintf関数は引数は一つだけで、単純に文字列を表示しているのみでシンプルですね。
8行目は引数を3つ設定しており、3つめの引数に新しい記号「*」(アスタリスク)が出てきています。これは掛け算を意味しています。 数値の計算については、次の記事で例つきでもうすこし書きますが、とりあえずこの3つ目の引数の「5 * 100」がまず計算されます。
式の結果、5 × 100 = 500
となり、500 を引数に書いているのと同じことになります。
つまり、8行目は下に書いたのと同じような命令となります。
printf("村人A:レベル「%d」だと体力も「%d」もあるんですね。\n", 5, 500 );
上のコードだと、普通の引数を3つ指定した printf 関数の使用となりますね!
最初の「%d」に2個目の引数の数値「5」が 入って、「%d」に3個目の引数の数値「500」が入った文字列が表示されます。
printf の文字列に書く「%d」に対応する、入力される2個目以降の引数がちゃんと書いていないと予期せぬ結果が得られる可能性があります。
例:printf("1個目=%d、2個目=%d、3個目=%d", 100, 200 );
この例だと、「%d」が3個書いてあるのに、引数が足りていません。
実行するとビルドは成功し、プログラムが実行され
「1個目=100、2個目=200、3個目=3215445
」
という結果がでました。このように3個目の引数が設定されていないため、想定しない結果が返ってくることになり、注意しないとわかりづらいバグの原因となります。
次回は変数の使い方と、計算のやりかた第二段をお話ししたいと思います。
今回はここまで。おつかれさまでした。
更新日 | 更新内容 |
---|---|
2018.6.21 | アイキャッチ更新 |
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: