Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2018年6月14日に更新

第2章01 レベルから体力を計算する

イチからゲーム作りで覚えるC言語
第1章06 新しいプロジェクトを追加する : PREV
NEXT : 第2章02 変数を使ってレベルから体力などを計算する :

この記事でやること

この章から基本的なC言語の内容について知識を深めていきましょう! 今回はプロジェクト「0020_keisan」で簡単な計算をして、結果を表示するプログラムを作ってみましょう。

計算するプログラムを書いてみる

まずは変数を使わずに、計算結果を表示するプログラムを書いてみましょう。 ここではプログラムは別のプロジェクト「0020_keisan」を作成しています。必要に応じて 作ってみて ください。

 
Keisan.c
#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行の詳細を確認 printf関数の呼び出し1行の詳細を確認

ただ、printf関数を使うときの引数(ひきすう)の数が1個ではなく、2個のもの、3個ものがあること。

「%d」という特殊な役割をする 2 文字の組み合わせが何個か入っていること、などの違いがあります。

ソースコードの中身解説

一行ごとに確認していきましょう!

printf 関数で変換指定子の利用例

まず最初の printf 関数から見ていきましょう。

 
Keisan.c
  printf("村人A:あなたのレベルは「%d」なんですか!\n", 5);

この関数で「村人A:あなたのレベルは「5」なんですか!」+改行 の文字表示が行われています。

%d  が数字の 5 に置き換わっていることがわかるかと思います。

この %d という2文字は 変換指定子と呼ばれていて、 2個目以降の引数に書いた整数の値(データ)を文字として変換して表示してくれる機能 があります。

printf で数字などを埋め込んで表示する(変換指定子)

printf 関数は 「printf(引数1個目, 引数2個目, 引数3個目, …)」といった複数の引数を渡すことができる関数 です。

前回までは引数1個目に文字列のみを書いていました。

引数1個目に文字列を書き、その文字列の一部に変換指定子(「%d」みたいな特殊な文字)を書くと、最初に登場する %d は引数1個目の内容に変換、2回目に登録する %d は引数2個目の内容に変換、3回目に登場する %d は引数3個目の内容に変換、4回目(以下略)

という機能を持っています。

こういったデータを文字に変換してくれる機能をもたせた文字列の部分書式指定文字列と呼びます。

例として引数を3つ使った printf 関数の変換を図にてしてみて整理してみます。

参考例:printf 関数で変換指定子を利用 printf 関数でフォーマット指定子を利用

  • 1つ目の引数に"レベルは%d、体力は%d"という文字列が入っています。
  • 2つ目の引数に数字の 10 が指定されています。
  • 3つ目の引数に数字の 100 が指定されています。

この状態で実行すると、「レベルは10、体力は100」と表示されます。

一つ目の引数で書いている文字列の中で、左から登場する順番で引数2番目、3番目…と、変換する値を決めています。ですので、最初の「%d」は、引数2番目の「10」に変換され、次の「%d」は引数3番目の「200」に変換されて表示されています。

その他の printf 関数で変換指定子の利用例

続きのKeisan.c のソースコードを確認していきましょう。

 
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行目は下に書いたのと同じような命令となります。

 
Keisan.c
  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 アイキャッチ更新
イチからゲーム作りで覚えるC言語
第1章06 新しいプロジェクトを追加する : PREV
NEXT : 第2章02 変数を使ってレベルから体力などを計算する :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

ゲーム等で使えるつなぎ目のないループするテクスチャ画像の作り方

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章01 レベルから体力を計算する
第2章01 レベルから体力を計算する
この記事でやること
この記事でやること
計算するプログラムを書いてみる
計算するプログラムを書いてみる
ソースコードの中身解説
ソースコードの中身解説
printf 関数で変換指定子の利用例
printf 関数で変換指定子の利用例
printf で数字などを埋め込んで表示する(変換指定子)
printf で数字などを埋め込んで表示する(変換指定子)
その他の printf 関数で変換指定子の利用例
その他の printf 関数で変換指定子の利用例
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020