p.122 while文
・if文を第2要素のみにした繰り返し構文がwhile文
・よって「回数指定の繰り返し」ならforを、回数が決まらない繰り返しならwhileを用いると良い
・書式: while(継続条件){…}
・なお、for文とwhile文は繰り返しの1回目の前に継続条件のチェックをするので、前判定繰り返しという。
・前判定繰り返しは1度も実行しない可能性のある繰り返しを表現できる。
p.124 while01.cs
//p.124 while01.cs
using System;
class while01
{
public static void Main()
{
int i = 0;
while (i < 100) { //変数iの値が100未満である間、以下を繰返す
Console.WriteLine("i = {0,3}", i); //0から99までを3桁で表示
i++; //インクリメントする
}
}
}
アレンジ演習:p.124 while01.cs ⇒ whilefor01.cs
・for文で書き直そう
作成例
//アレンジ演習:p.124 while01.cs ⇒ whilefor01.cs
using System;
class while01
{
public static void Main()
{
for (int i = 0; i < 100; i++) { //変数iの値を0から100未満である間、+1しながら、以下を繰返す
Console.WriteLine("i = {0,3}", i); //0から99までを3桁で表示
}
}
}
p.124 条件式は必ずbool型
・for文の第2要素(継続条件)および、while文、do-while文の継続条件には、bool型の変数または式のみ記述できる ・よって、bool型を返す演算子である関係演算子の式を用いることが多い。 ・なお、C/C++では整数値でbool型を代用できるため「while(1)」などの表記が可能だが、C#では文法エラーになる
p.125 while文を使った無限ループ
・無限ループはfor文の第2要素の省略で可能だが、第1要素も第3要素も省略した「for(;;)」を用いる代わりに、 「while(true)」とする方が分かりやすい。 ・なお、繰り返し文の中でbreakを実行することで、ループを抜けられるが、switch-case文のbreak文はswitch構造の一部なので、 ループは抜けないので注意 ・また、2重ループの内側のループの中でbreakを実行すると、内側のループのみを抜けるので、外側のループは続行になる
p.125 menu01.cs
//p.125 menu01.cs
using System;
class menu01
{
public static void Main()
{
bool bEnd = false; //bool型の変数で表した終了フラグをオフにする
while (true) { //無限ループ
Console.WriteLine("***** Menu *****");
Console.WriteLine("0:終了");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("****************");
Console.Write("選択---- ");
string strAns = Console.ReadLine();
switch (strAns) { //入力された文字列に応じて分岐
case "0": //0:終了
bEnd = true; //終了フラグをオンにする
break; //switch構造を抜ける(繰返しは抜けない)
case "1": //1:ファイル
Console.WriteLine("ファイルが選択されました");
break; //switch構造を抜ける(繰返しは抜けない)
case "2": //2:編集
Console.WriteLine("編集が選択されました");
break; //switch構造を抜ける(繰返しは抜けない)
default:
Console.WriteLine("入力に間違いがあります");
break; //switch構造を抜ける(繰返しは抜けない)
}
Console.WriteLine(); //改行
if (bEnd) { //「if (bEnd == true)」と同じ意味:終了フラグがオン?
Console.WriteLine("それでは、このプログラムを終了します");
break; //繰り返しを抜ける
}
}
}
}
提出:アレンジ演習:p.125 menu01.cs
・終了フラグ「bool bEnd = false;」を用いずに同じ処理になるようにしよう