私はコスモスでOSを作り、ユーザーの入力に行くためにgoto
を使用したいが、私はgoto文の範囲内でエラーにC#の後藤ユーザー入力
はありません、このようなラベル「入力」を取得していています
「入力」は、ユーザが入力した変数である。
なぜこれが起こっているのか理解できますが、どうすれば修正できますか?
私はコスモスでOSを作り、ユーザーの入力に行くためにgoto
を使用したいが、私はgoto文の範囲内でエラーにC#の後藤ユーザー入力
はありません、このようなラベル「入力」を取得していています
「入力」は、ユーザが入力した変数である。
なぜこれが起こっているのか理解できますが、どうすれば修正できますか?
することはできませんユーザー変数スコープ(名前空間)内のラベル識別子を使用する必要があります。.. goto文のスコープ識別子によってそれを示すように「:」..例えば
using System;
class Program
{
static void Main()
{
Console.WriteLine(M());
}
static int M()
{
int dummy = 0;
for (int a = 0; a < 10; a++)
{
for (int y = 0; y < 10; y++) // Run until condition.
{
for (int x = 0; x < 10; x++) // Run until condition.
{
if (x == 5 &&
y == 5)
{
goto Outer;
}
}
dummy++;
}
Outer:
continue;
}
return dummy;
}
}
方法M 3つのネストされたループを含みます。最初のループは、2つの内部ループと同様に、数値[0,9]を反復します。しかし、3番目のループでは、breakキーワードを使用してループを終了させる条件がチェックされます。 の場合 壊れた場合
コードは、内側ループが完了するたびにダミー変数をインクリメントします。内部ループが早期に終了する場合は、この変数をそのままにしてください。 goto文では、インクリメントされません。 結果: 値50がコンソールに出力されます。 intは10 x 5回インクリメントされます。 しかし:後藤がブレークした場合は 、結果は10×10倍、または100
・ホープ、このヘルプの合計になります.. :)私はコスモスでOSを作っています
私はそれを長い道のりでやらなければならないようです。 –
変数はジャンプやスコープの識別子ではありません...意味がありません。要件とアーキテクチャを再確認することを検討してください:) – user7417866
リモートで役に立つ回答を得るためには、OSの範囲に関する情報を提供する必要があります。あなたはCOSMOSをちょっと見て回っているだけですか、カスタムCOSMOS OSを提供したいと思う特別なケースがありますか?
、あなたがに非常に良い理由を持っていない限り、特に後者の場合(専門的なOS)であなたは明らかに、GOTOの使用を控える必要があり、ユーザの入力
に行くためにはgotoを使用したいですそうしてください(私の謙虚な意見では、GOTOを使う本当に良い理由はありません)。現代のプログラミング言語でGOTOに代わる実行可能な選択肢があります。あなたは、あなたの設計、アルゴリズムなどを再考するべきです。
質問にお答えします。あなたが経験している非常にエラーメッセージを生成する例を次に示します。Method
にラベルを定義しました。とにかく、Main
からは、GOTOの呼び出しスタックにプッシュされたデータがないため、メソッドが終了した後、コンパイラはどこに戻ってくるかわからないので、mainから別のメソッドにジャンプすることはできません(さらにthe Wikipedia page about the call stackを参照してください)情報)。
ラベルとGOTOは同じスコープ
void MyMethod()
{
goto MyLabel;
// do something
MyLabel:
return;
}
とコスモ・コード内で生きているので、以下、とにかく、働くだろう? –
C#ではラベル付きのステートメントのみを['goto'](https://msdn.microsoft.com/en-us/library/13940fs2.aspx)できます。確かに変数に行くことはできません。 – Richard
とにかく正確にgotoを使いたいのですが? – Sayse