演習課題「文字列を受け取る関数をつくろう」
文字列を受け取って、メッセージを出力する say_hello_to 関数を作成してください。
プログラムを実行して、正しく表示されれば演習課題クリアです!
期待する出力値
Hello, paiza
Hello, world
Hello, C-lang
演習課題「間違い探し」
右のコードエリアには、引数として 3 の倍数が与えられたときメッセージを出力し、
そうでないときは、値をそのまま出力する関数が定義されています。
この関数を、正しく動作するように修正してください。
プログラムを実行して、正しく表示されれば演習課題クリアです!
期待する出力値
100
333 is multiple of three
117 is multiple of three
649
#08:RPGの攻撃シーンをつくろう
関数を使った具体例として、RPGの攻撃シーンを出力するプログラムを作成します。
文字列は、次のようにして初期化できます。char slime[] = "スライム";
char monster[] = "モンスター";
char dragon[] = "ドラゴン";
1 から 10 のランダムな数は、次のようにして生成できます。#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int random = rand() % 10 + 1;
}
・srand で引数の値をもとにランダムな数を初期化しています。
・rand() でランダムな数が生成されるため、「rand() % 10 + 1」で 1 から 10 のランダムな値を生成できます。
※rand() で生成される値の最大値は、次のようにして確認できます。#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("ランダムな数の最大値 : %d\n", RAND_MAX);
}
出力 : 2147483647
rand() を使うと、0 から RAND_MAX の値がランダムで生成されます。
文字列を引数として受け取る関数は次のように定義できます。void attack(char target[])
{
printf("勇者は%sを攻撃した\n", target);
}
関数を定義するときのテクニックの 1 つに「早期リターン」があります。
「return」を実行すると、その関数の処理が終了するので、例外的な条件を満たすものをふるい落とすことができます。
例えば、引数で値を 1 つ受け取り、その値が
・0 より小さいときは、0 を返す
・100 より大きいときは、100 を返す
・0 以上 100 以下のときは、そのまま返す
ような関数は、次のように定義できます。int f(int x)
{
if (x < 0) {
return 0;
}
if (x > 100) {
return 100;
}
return x;
}
これは、次のように書いたときよりも見やすい場合があります。int f(int x)
{
if (x < 0) {
return 0;
} else if (x > 100) {
return 100;
} else {
return x;
}
}
void を指定した関数は、単に「return;」と記述するだけで処理を終了できます。void attack(char target[])
{
printf("勇者は%sを攻撃した\n", target);
int hit = rand() % 10 + 1;
if (hit > 6) {
printf("クリティカルヒット! %sに100のダメージを与えた!!\n", target);
return;
}
printf("%sに%dのダメージを与えた!\n", target, hit);
}
このチャプターで作成したコードです。// RPGの攻撃シーンをつくろう
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void attack(char target[])
{
printf("勇者は%sを攻撃した\n", target);
int hit = rand() % 10 + 1;
if (hit > 6) {
printf("クリティカルヒット! %sに100のダメージを与えた!!\n", target);
return;
}
printf("%sに%dのダメージを与えた!\n", target, hit);
}
int main(void)
{
char slime[] = "スライム";
char monster[] = "モンスター";
char dragon[] = "ドラゴン";
srand(time(NULL));
attack(slime);
attack(monster);
attack(dragon);
}