C++スコーラ

if文

最終更新:

cschola

- view
管理者のみ編集可
皆さんこんにちは、今回は分岐について説明します。
分岐とは、もし~なら何かをするというものです。

たとえば、自販機なら支払われたお金が足りなければボタンが光らない。

たとえば、ゲームでは自機が敵機に当たったらダメージを負うなどです。

分岐の命令は if文 と switch文 がありますそれぞれ使い分けていきましょう。 

if文

今回はif文について説明し、次の回でswitch文について説明します。
まずは使い方を見てください。
int num = 0;

printf("猫は好きですか?\n
	0:好き\t1:嫌い\n");

scanf_s("%d",&num);

if(num == 0){ //もし num が0ならば
	printf("私と趣味が合いそうです。\n");
}
else{ //そうでないなら
	printf("あ、ふーん\n");
}
ちなみに、printf の中に \t と書くとタブを表示します。

プログラムが実行されたら0か1を入力してください。
0を入力した場合と1を入力した場合で結果が変わります。
if文は if と書いて次にカッコを書き、その中に条件を書きます。
その次に中カッコを書き、その中に条件を満たしていた場合に行う処理を書きます。
今回の条件は num == 1 となっています。これは num が1と等しければ条件を満たしたことになります。
条件を満たしている場合を「真」、満たしていない場合を「偽」といいます。
この == を比較演算子といい、右に書かれている数値と左に書かれている数値を比較します。
他にも種類があるので覚えておきましょう。
<  … 左の数値よりも右の数値が大きければ真
>  … 左の数値よりも右の数値が小さければ真
<= … 左の数値が右の数値以下なら真
>= … 左の数値が右の数値以上なら真
== … 左の数値と右の数値が等しければ真
!= … 左の数値と右の数値が等しくなければ真

else if

次のような場合もあります。
int num = 0;

printf("やくそう は 10G だよ\n"
        "0:10G払う\t1:100G払う\t2:払わない\n");

scanf_s("%d",&num);

if(num == 0){ //numが0なら
	printf("まいどあり\n");
}
else if(num == 1){ //0ではなく、なおかつ1なら
	printf("90G の おつりだよ\n");
}
else{ //そうではないなら
	printf("冷やかしならかえりな\n");
}
else if と書いた場合ひとつ前の if文に当てはまらず、なおかつこの条件に当てはまる場合にその中の処理が実行されます。
簡単に言うと「違った場合さらに分岐させる」ということです。
if文の中にif文を作ることもできます
int a = 0;

int b = 0;

printf("どうのつるぎ なら 100G だよ\n"
         "0:買う\t1:買わない\n");

scanf_s("%d",&a);

if(a == 0){
	printf("ここで装備していくかい?\n"
              "0:はい/t1:いいえ/n");

	scanf_s("%d",&b);

	if(b == 0){
		printf("どうのつるぎ を装備した\n");
	}
	else{
		printf("どうのつるぎ をふくろにいれた\n");
	}
}
else{
	printf("あ、ふーん\n");
}
実はelse文は無くても構いません。必要なときは書くようにしましょう。
int num = 0;

printf("目の前に宝箱がある\n"
        "0:開ける\t1:無視する\n");

scanf_s("%d",&num);

if(num == 0){
	printf("なにかのホネ をてにいれた\n");
}

AND、OR

条件を2つ以上指定したい場合があります。
その場合論理演算子を使います。
int num = 0;

printf("整数を入力してください。\n");

scanf_s("%d",&num);

if((num >= 5) && (num <= 10)){
	 printf("入力された数値は5以上10以下です。\n");
}

if((num == 6) || (num == 9)){
	 printf("入力された数値は6か9です\n");
}

if(!(num >= 7)){
	 printf("入力された数値は7以上ではありません。\n");
}
条件を複数用意するときは、 ( ) を使ってそれぞれの条件をまとめましょう。
論理演算子にも種類があります。
&& … 左右二つの条件が両方とも合っているなら真
|| … 左右の条件のどちらか一方があっているなら真
!  … 条件を否定する(真と偽をひっくり返す)

よくあるミス

次のコードを見て、実行結果を想像してみてください。
int a=1;
if(a==0);{
    printf("ゼロです。");
}
このコードではaの値が1であるのにもかかわらず「ゼロです。」と表示されてしまいます。
実はif文のかっこは省略することができます。
int a=0;
if(a==0) printf("ゼロです。");
なので先ほどのコードを分解すると次のようになります。
int a=1;
if(a==0);//aが0だったら何もしない。
{
 printf("ゼロです。");//表示
}
{ }で囲まれた部分はブロックと呼ばれ、コードを区画分けするためのものです。
先ほどのifの条件のところに「;」があることでif文が終わり、{ }内のコードはif文に関係なく実行されてしまっているのです。
文法上は間違いではないのでエラーメッセージなどは出ません。もしif文がうまく動かないときは余計な「;」が無いか確認してみてください。{ }の省略についてはこちらも読んでみてください。
https://w.atwiki.jp/cschola/pages/62.html

練習問題

次のようなプログラムを作ってください。
第1問
 ユーザーに整数を入力してもらい、奇数なのか偶数なのか表示する。

第2問
 ユーザーに数値を二つ入力してもらい、同じ数値だった場合は「同じです」と表示し、違う場合はどちらが大きいのか判断して表示する。
目安箱バナー