今回は、「C言語/if文とelse文で条件分岐をさせる方法」についての説明です。
目次
1.初めに
Excelには、if関数という条件分岐をさせるための関数があります。
簡単に言うと、「“もし~なら”という条件付けをして、正しければ〇〇、正しくなければ✕✕と表示する」といったルールを決めることができる関数です。
あまり詳しくない方は以下の記事も参考にしてみると良いかもしれません。
この条件分岐なのですが、C言語にも存在します。
ということで、今回はC言語における条件分岐についてまとめていきます。
2.if文を用いた条件分岐
以下のようにプログラムを書いてみます。
#include<stdio.h>
void main() {
int a;
printf(“数値を入力したらEnterキーを押してください。”);
scanf(“%d” , &a);
if(a > 0) {
printf(“入力されたのは正の値です。\n”);
}
}
【scanf】と【if】という関数が新たに出てきました。
どういったルールで記述しているのかは一旦置いといて、コメント書きしたような作用をすると思ってください。
要するに、キーボードで入力した数値が0より大きければ【printf(“入力されたのは正の値です。\n”);】が実行され、キーボードで入力した数値が0以下ならば【printf(“入力されたのは正の値です。\n”);】は実行されないということになります。
この通りにちゃんと動作するのかをプログラムを実行して確認してみましょう。
まず、printfで指定した文字列である「数値を入力したらEnterキーを押してください。」という文面が表示されます。
ここで、この指示通りに適当に数値を入力してEnterキーを押してみます。
※ここでは“5”と入力しました。
↓Enterキーを押す
すると、もう1つのprintfで指定した文字列である「入力されたのは正の値です。」と表示されます。
次は、“-5”と入力してみます。
すると、今度は「入力されたのは正の値です。」という文面が表示されません。
ちゃんとコメント通りの動きをしていますね。
scanf関数とは?
端的に言えば、入力を行えるようにする関数です。
printfが入力した文字を出力する関数でしたが、反対に文字の入力を促してくる関数がscanf関数になります。
具体的には、プログラムの実行途中にキーボードからの入力を受け付けさせることが可能になります。
ずっとログインしていなかった会員ページに久々にログインしようとすると、パスワードの再設定を促されたりしますよね?
あんなイメージで、プログラムを実行している時に『○○を入力してください』と表示できるのがscanfです。
使い方は単純で、以下のように入力するだけです。
scanf(“変換指定子” , &変数名);
今回の例の場合、%dで整数の数値の入力を可能にし、あらかじめ初期化していた変数aを使用するように設定しました。
要するに、キーボードで入力した整数が変数aの値として認識されるようにできたということです。
ただ、scanf関数はC言語では標準で搭載されていますが、Microsoftの環境では非推奨とされています。
その為、実際にプログラムを組む際は、scanf関数は使わないようにするのが無難です。
ここでは基本的な動作の勉強用途なので、普通に使用しますけどね。
if文とは?
if文に関しては、Excelのif関数を使ったことがある方なら何となく理解できるかと思います。
使い方が全く同じですからね。
以下のような入力規則になっているだけです。
if(条件) {条件を満たした時に実行する内容};
だから、【a > 0】という条件を満たした時にのみ【printf(“入力されたのは正の値です。\n”);】が実行されたわけです。
そして、ここで言う変数aはscanfで使用しているので、キーボード入力した整数がif文に従って条件分岐しているのです。
ちなみに、“if関数”と調べても出てきますが、“if文”という呼び方が一般的なようです。
本当に実行されているのか確認する方法
上記のプログラムで条件分岐できるというのはわかりましたが、条件を満たしていない場合が正しく動作しているのか不安になりませんでしたか?
条件を満たしているなら「入力されたのは正の値です。」という文面が表示されてプログラムが動いているとわかりますが、条件を満たしていないと何も表示されませんからね。
そんな時はデバッグツールを使います。
このツールを使うと、プログラムの流れを特定の箇所で止めることが可能です。
このプログラムを止める点のことをブレークポイントと呼びます
例として、if文のある7行目をブレークポイントにしてみますね。
プログラムを書き込むエリアを眺めていると、左端部がなんか灰色がかっていることに気付いていたでしょうか?
ここにマウスカーソルを合わせると、白丸が浮かび上がります。
この白丸を7行目で浮かび上がらせた状態でクリックしてみましょう。
すると、赤丸が表示されっぱなしになります。
これがブレークポイントの目印です。
ブレークポイントを消したい場合は、赤丸に照準を合わせてクリックすれば消えます。
一時的に消したい場合は、赤丸に照準を合わせた際に「無効にする」と表示されるので、それをクリックしてみましょう。
そうすると、赤丸の塗りつぶしが消えて、一時的に無効にできます。
プログラムの記述が少ないうちは赤丸を付けたり消したりしていれば良さそうですが、複雑になってくると『今回はブレークポイントとして動いて欲しくないけど、ブレークポイントの目印は一応取っておきたい』という場面もありそうなので、この方法も覚えておくと吉ですね。
ブレークポイントを設けたら、実際に動作を確認してみましょう。
これまではブレークポイントが無かったので「デバッグなしで開始」を選択していましたが、「デバッグの開始」を選択しましょう。
もしくは、「ローカル Windowsデバッガー」を選択しても構いません。
最初は、デバッグ無しで実行している時同様に、scanfの整数入力画面が表示されます。
ここで先程同様に“5”と入力すると、入力画面が最小化され、以下のような画面が表示されます。
ブレークポイントの赤丸の中に右矢印が表示されていますね。
『今はこの直前までプログラムを実行したよ!』という目印です。
この時、左下の自動という場所に“a”の値が“5”になっていると書かれていることがわかります。
このように、ブレークポイント時点での変数の値が見てわかるようになります。
デバッグを終了する時は、「拡張機能(X)」の下にある赤い■を押しましょう。
実行されているプログラムを確認する方法
ブレークポイントでプログラムの動作を一時停止し、その時の状態を確認することはできました。
これに加えて、実行されているプログラムを確認する方法なんかも存在します。
ここで使用するのは、「ウィンドウ(W)」の下にある矢印と点が合わさった3つのボタンの真ん中のヤツです。
点を矢印が跨いでいるマークです。
左から順番に、ステップイン・ステップオーバー・ステップアウトという名称になっています。
ステップインとステップアウトはユーザー定義関数が出てくるまで使用しませんので一旦置いておきます。
真ん中のステップオーバーをクリックする度に、プログラムが実行される行に移動していきます。
試しに“a”が0より大きい数値の時に先程のブレークポイントで止まった状態からステップオーバーをクリックすると、矢印が1行下に移動します。
この状態だと、8行目の直前までしか実行されていないので、「入力されたのは正の値です。」という文面は表示されません。
ここでもう一度ステップオーバーをクリックすると、8行目が実行されて矢印の位置が最下部の10行目に移動します。
ちなみに、“a”の値が“5”だから上記のように8行目が実行されましたが、a>0を満たさない数字を入力すると動きは変化します。
a>0を満たさないと条件分岐で8行目が発動しなくなるので、7行目でステップオーバーをクリックすると一気に10行目まで飛びます。
こうしてどこの行が実行されているのか確認できるようになっているのです。
3.if~else文を用いた条件分岐
Excelにおけるif関数は、「条件を満たしたら○○をして、条件を満たさなければ△△をする」というように、条件を満たさなかった場合の処理についても指定することができます。
プログラムにて同じようなことができるのがif文であるのなら、当然ながらif文でも同じように条件を満たさなかった場合の処理を指定できそうなものですよね?
その要望を叶えてくれるのがif~else文です。
使い方もExcelにおけるif関数に非常に似ている為、これに関しては比較的覚えやすいかと思われます。
早速ですが、例を見ていきましょう。
#include<stdio.h>
void main() {
int a;
printf(“数値を入力したらEnterキーを押してください。”);
scanf(“%d” , &a);
if(a > 0) {
printf(“入力されたのは正の値です。\n”);
}
else {
printf(“入力されたのは正の値ではありません。\n”);
}
}
【else { printf(“入力されたのは正の値ではありません。\n”); }】の部分が追加されていますね。
このように、if文の後に【else {}】と入力することで、直前のif文の条件を満たさなかった場合の処理を指定することが可能です。
この例の場合、【a > 0】を満たさない場合…【a ≦ 0】の時に【printf(“入力されたのは正の値ではありません。\n”);】が実行されます。
試しに“-2”と入力してみると、以下のように出力されることを確認できます。
もちろん、【a > 0】にしたら【printf(“入力されたのは正の値です。\n”);】が実行されます。
これがif~else文の使い方です。
4.else if文を用いた複数の条件分岐
if~else文で「条件を満たしたら○○をして、条件を満たさなければ△△をする」という条件分岐はできました。
そんなelse文ですが、条件を更に分岐させる方法が存在します。
Excelにおけるif関数でも、if関数の中にif関数を使用することで、更に条件分けができるでしょう?
この方法とやることは似通っています。
#include<stdio.h>
void main() {
int a;
printf(“0,1,2から好きな数値を入力したらEnterキーを押してください。”);
scanf(“%d” , &a);
if(a == 0) {
printf(“入力されたのは0です。\n”);
}
else if (a == 1) {
printf(“入力されたのは1です。\n”);
}
else if (a == 2) {
printf(“入力されたのは2です。\n”);
}
else {
printf(“0か1か2を入力しろよ。\n”);
}
今度はelse ifというものが出現しましたね。
elseとはそもそも[他の]という意味です。
なので、else if文は直前のif文の条件を満たさなかった時の他の条件を指定することが可能です。
まず、【if (a == 0)】となっていますが、これは「aが0に等しい時」という条件分けです。
“=”が2つある理由は、“=”が1つだけだと代入の意味になってしまうからです。
等しいことを表したい場合は“=”が2つ必要だと覚えておきましょう。
余談ですが、“!=”だと等しくないことを表すようになります。
なので、aが0に等しい時は【printf(“入力されたのは0です。\n”);】が実行されます。
この条件以外をelse if文で指定しているのです。
そして、if文・else if文のどの条件にも当て嵌まらない場合の処理をelse文で指定しているわけです。
記述方法はif文と同じです。
else if(条件) {if文以外の条件を満たした時に実行する内容};
ということで、0,1,2,3を入力した場合の応答は以下のようになります。
else if文を用いれば、複数の条件分岐を簡単に設定できるんですね。
ここではelse if文は2つしか使いませんでしたが、3つでも4つでも設定可能です。
色々試して遊んでみると覚えがいいと思いますよ?
以上、「C言語/if文とelse文で条件分岐をさせる方法」についての説明でした。