「C言語/制御文」の版間の差分

削除された内容 追加された内容
→‎分岐文: レイアウト調整
goto文を後回しに。BASICじゃないんだから。
641 行
</syntaxhighlight>
 
=== for文の中のif文のbreak ===
[[File:Destination Break Programming in If sentence in For sentence.svg|thumb|600px|]]
 
図のようにfor文の中にif文があり、そのif文のブロック内に break; がある場合、
 
breakによって抜け出す先は、if文のひとつ上にあるfor文の終了直後の地点です。
 
for文が2つ以上ある場合、break文で一気に複数のfor文を抜け出すことは '''できない''' です。
 
{{-}}
== 分岐文 ==
 
=== goto文 ===
<ref>『JISX3010:2003』p.103「6.8.6.1 goto文」</ref>
goto文とは、分岐文の内の1つであり、指定するラベルへ制御を移す。
goto文は、識別子が指すラベルへ制御を移す。
そのラベルはgoto文を含む関数内になければならない(関数有効範囲)。<ref>『JISX3010:2003』p.21「6.2.1 識別子の有効範囲」</ref>
 
<pre>
goto文の使用は一般には推奨されません。
理由は構造を把握しづらいコード(スパゲティコード)となるからです。
また、goto文は多重にネストされたスイッチやループから抜け出すために使われることがありますが、
それも関数化してreturn文で抜け出すように書き換えることができます。
</pre>
 
goto文及びラベルの記述は次のようになっている。
*goto文
<syntaxhighlight lang="C">
goto 識別子;
</syntaxhighlight>
*ラベル
<syntaxhighlight lang="C">
識別子:
</syntaxhighlight>
 
<syntaxhighlight lang="C">
//例 goto文の使用例
#include <stdio.h>
 
int main(void)
{
int x,y;
for(y=1;y<=9;++y){
for(x=1;x<=9;++x){
if(y*x>=50)goto exit_loop;
}
}
exit_loop:
printf("九九の表で、最初に50以上になるのは%d×%d。\n", y, x);
}
</syntaxhighlight>
 
=== continue文 ===
<ref>『JISX3010:2003』p.104「6.8.6.2 continue文」</ref>
continue文(コニュティニューぶん)とは、分岐文の内の1つであり、ループ本体の中で使われ、ループ本体の終わりへ制御を移す。
つまり、ただちに制御式が実行され、それからループが繰り返される。
ループ本体の終わりとはcontinue文を含む最も内側のループ本体の最後の文の直後である。
 
continue文の記述は次のようになっている。
* continue文
<syntaxhighlight lang="C">
continue;
</syntaxhighlight>
 
<syntaxhighlight lang="C">
//例 continue文の使用例
#include <stdio.h>
 
int main(void)
{
//1から100までの整数の中で、3の倍数と4の倍数以外を表示する。
int i;
for(i=1;i<=100;++i){
if(i%3==0||i%4==0)continue;
printf("%d ",i);
}
}
</syntaxhighlight>
 
=== break文 ===
<ref>『JISX3010:2003』p.105「6.8.6.3 break文」</ref>
756 ⟶ 679行目:
また、break文は、break文を含む最も内側のスイッチ本体またはループ本体に対応する。
 
=== for文の中のif文のbreak ===
[[File:Destination Break Programming in If sentence in For sentence.svg|thumb|600px|]]
 
図のようにfor文の中にif文があり、そのif文のブロック内に break; がある場合、
 
breakによって抜け出す先は、if文のひとつ上にあるfor文の終了直後の地点です。
 
for文が2つ以上ある場合、break文で一気に複数のfor文を抜け出すことは '''できない''' です。
 
{{-}}
=== return文 ===
<ref>『JISX3010:2003』p.103「6.8.6.4 return文」</ref>
791 ⟶ 723行目:
 
returnの意味は、英語では、よく「戻ってくる」「帰ってくる」の意味で使われたり、借りたものが返って来る、借りたものを返すなどの意味で使われこともありますが、他にも質問や意見などに「言い返す」などの意味があったり、投資などで利益を返すという意味もあります。(※ ジーニアス英和辞典にちゃんとそう書いてもある。)
 
 
=== continue文 ===
<ref>『JISX3010:2003』p.104「6.8.6.2 continue文」</ref>
continue文(コニュティニューぶん)とは、分岐文の内の1つであり、ループ本体の中で使われ、ループ本体の終わりへ制御を移す。
つまり、ただちに制御式が実行され、それからループが繰り返される。
ループ本体の終わりとはcontinue文を含む最も内側のループ本体の最後の文の直後である。
 
continue文の記述は次のようになっている。
* continue文
<syntaxhighlight lang="C">
continue;
</syntaxhighlight>
 
<syntaxhighlight lang="C">
//例 continue文の使用例
#include <stdio.h>
 
int main(void)
{
//1から100までの整数の中で、3の倍数と4の倍数以外を表示する。
int i;
for(i=1;i<=100;++i){
if(i%3==0||i%4==0)continue;
printf("%d ",i);
}
}
</syntaxhighlight>
 
=== goto文 ===
<ref>『JISX3010:2003』p.103「6.8.6.1 goto文」</ref>
goto文とは、分岐文の内の1つであり、指定するラベルへ制御を移す。
goto文は、識別子が指すラベルへ制御を移す。
そのラベルはgoto文を含む関数内になければならない(関数有効範囲)。<ref>『JISX3010:2003』p.21「6.2.1 識別子の有効範囲」</ref>
 
<pre>
goto文の使用は一般には推奨されません。
理由は構造を把握しづらいコード(スパゲティコード)となるからです。
また、goto文は多重にネストされたスイッチやループから抜け出すために使われることがありますが、
それも関数化してreturn文で抜け出すように書き換えることができます。
</pre>
 
goto文及びラベルの記述は次のようになっている。
* goto文
<syntaxhighlight lang="C">
goto 識別子;
</syntaxhighlight>
* ラベル
<syntaxhighlight lang="C">
識別子:
</syntaxhighlight>
 
<syntaxhighlight lang="C">
// 例 goto文の使用例
#include <stdio.h>
 
int main(void)
{
int x,y;
for(y=1;y<=9;++y){
for(x=1;x<=9;++x){
if(y*x>=50)goto exit_loop;
}
}
exit_loop:
printf("九九の表で、最初に50以上になるのは%d×%d。\n", y, x);
}
</syntaxhighlight>
 
== 論理型 ==