2012-02-24 14 views
1

私のプログラムはC#のWindowsフォームアプリケーションです。C# "scanf"(カスタムコンソール付き)

私はインタプリタ/コンパイラIDEを持っていますが、基本的にカスタマイズされたコンソールウィンドウでカスタム言語を実行します。

"scanf"のような入力行を解釈するとき、ユーザーが入力を押していない間に通訳を一時停止するにはどうすればよいですか?

解析するサンプル・カスタムコード:私のプログラムは、3行目を処理するときに、ユーザーが何かを入力し、Enterキーを押すまで、例えば

1  VAR x AS INT 
2  START 
3  INPUT: x 
4  OUTPUT: x 
5  STOP 

は、これらのラインで、それは他の行を処理しません。

ライン解析によってラインの

擬似スニペット:

foreach (string line in inputCode) 
{ 
    LineType lineType = line.getType(); 

    if(lineType.InputStatement) 
    { 
    //wait for input here 
    } 
    else if(lineType.OutputStatement) 
    { 
    //analyze output code here 
    } 
    else if(lineType.AssignmentStatement) 
    { 
    //do Evaluation here 
    } 
} 

答えて

1

あなたは、各メソッドは、次の行を発射するイベントを発生させる必要があります。
INPUTメソッドは、ユーザーがenterキーを押した後にそのイベントを発生させる必要があります。

+1

解説していただけますか? – helix

+0

基本的には、プロシージャコードを非同期に変換します。 C#5の非同期またはイテレータを使用して簡単にすることができます – SLaks

+0

私はMicrosoft V.S.を使用しています。 2010 Express with C#3.0。それは非同期をサポートしていません... – helix

1

Console.ReadlineまたはConsole.ReadKeyを入力すると、コンソールsimillarからscanfへの入力を読み取ることができます。

+0

私はコンソールアプリケーションを使用していません。私はカスタマイズされたコンソールとしてフォームを使用しています。 – helix

+0

カスタマイズしたコンソールを開発しましたか?別のコントロールの上に座っていますか? – rerun

+0

コンソールは基本的にテキストボックスのあるフォームです。それはMDIフォームによって引き起こされます。 – helix