多分、プログラミングがなんたるかを理解していない気がします。
プログラミングは「こう書けばいい」…ではなく、「プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である」です。
つまり、「現実世界のシミュレーション」です。
まず、C#云々を置いといて、「手作業でやるならどうするか」を考えてみてください。
裏方処理でもいいです。とにかく現実世界でやるならどうするか。です。
今回の質問でのやりたいことを言い換えると、
[やりたい事]
1. 処理A, 2. 処理B
という定義がある。
ある人(Aさん)が数字を言うため、それぞれの処理をする必要があります。
たとえば、Aさんが1と言えば 処理Aをし、
2と言えば、処理Bをする。
ただし、この候補にない数字が言われたら、候補にある数字が言われるまで聞き返しなさい。
でしょうか。(別の言い方とかでもいいけど)
つまり、
あなた: 「どの処理をする?」
Aさん: 「3」
あなた: (無いっすね…)「どの処理をする?」
Aさん: 「4」
あなた: (無いっすね…)「どの処理をする?」
Aさん: 「2」
あなた: (あった…) → 処理Aをする
みたいな感じでしょうか。
で、「候補にない数字が言われたら、候補にある数字を言うまで繰り返す」系だと、複雑ですね。
では、言い換えてみましょう。
候補にない数字が言われたら、候補にある数字を言うまで繰り返すを言い換えると、
「候補にある数字が言われるまで繰り返す」とできませんか?
この言い換えたもので考えると、
1. 候補にある数字が言われるまで繰り返す
1.1. 質問をする
的に見えませんか?
処理A,B,... を何度も行うっていうのなら、(1)の中( (1.2)とか )でやると思いますが、今回は「候補にあるものが指定されるまで繰り返す」なのでおそらく、
1. 候補にある数字が言われるまで繰り返す
1.1. 質問をする
2. (ここまで来たら候補にあるものが指定されているので) 指定の処理をする
とかみたいになるかと思います。
(1)についてですが、これは数直線を考えるとわかりやすいですよ。
これが「"test", "run", "compile"のうちで…」とかみたいに文字列で比較する場合はちょっと工夫が必要ですが、今回は1~3とかのような数字なので。
もし1~3 であれば、 数直線を書いてみて、1と3にそれぞれ含んだ状態で囲ってみてください。
そうすると、1≦範囲≦3 のような状態になるはずです。
で、これって、「(範囲は)1より大きく、3以下である」ですよね。
もうちょっと見てみると、「範囲は1より大きい」かつ「範囲は3未満」みたいに見えますね。
(数Aの集合と論理の「かつ」「または」とかが分かっていればわかるはず)
なので、
条件式: 数字が1以上 かつ 数字が3以下
と解釈できますね。
かつ/または に関しては論理演算子を調べるといいですよ。
この論理演算子で繋げて、「数字が1以上 かつ 数字が3以下」を条件式にしたループ系の処理をすればいいだけです。((1)の場合)
(1.1) は単純に聞けばいいだけですね。
ただ、(1)の場合はトリッキーな方法も取れますね。(厳密には(1)と(1.2)とか?)
それは、「あえて何度も聞くつもりで、特定の条件が満たされたら終了する」ですかね。
(終了するではなく、処理をするとかでもいいですが)
つまり、あえて無限ループにして、遅延状態で、「条件分岐させる」とか。
コードにすると、
C#
1while( true ){
2 // なんらかの処理
3
4 if( /* ループを抜ける条件 */ ) break;
5}
のようにするとかですね。(「何らかの処理」はif文の後に来たりすることもあるが)
whileの条件式をtrueにしているのは、「while文 等は 条件式が満たされている間繰り返すから」ですね。