1

次のC#プログラムでは、「EOF!」のみが出力されると予想していました。コンソールで「Ctrl-Z」を押したら。代わりに、Enterキーを押すとすぐにプログラムが終了します。

var textReader = Console.In;
var sb = new StringBuilder();
while(textReader.Peek() != -1)
{
    sb.Append((char)textReader.Read());
}
Console.WriteLine("Entered: '{0}'", sb);
Console.WriteLine("EOF!");

例:

12345 <= I entered this
Entered: '12345 <= program outputs this
'
EOF!
Press any key to continue . . .

誰かが上記の動作を説明できますか?それは私が期待したものではありません。

Consoleから複数行の入力を読み取るにはどうすればよいですか。一度に1文字で?

更新:以下の回答のとおり:問題は、Peek()が信頼できないことです。ただし、Read()の使用は機能します。

4

2 に答える 2

3

Console.In.Read() は EOF で -1 を返すため、これを行うことができます。

int c;
while((c = Console.In.Read()) != -1)
Console.Out.Write((char)c);
于 2012-07-01T17:23:23.563 に答える
1

Ctrl-Z を押すと、値 26 が生成されConsole.In.Peek(); ます。-1 を生成するには、入力ストリームを閉じる必要があります (コンソールを閉じるか、Ctrl-C (デフォルト) を押すか、明示的に を呼び出すと発生しますConsole.In.Close())。

また、デフォルトでは、コンソール ストリームはライン モードで動作します。つまり、Enter キーを押すまで、ストリームは実際には文字で埋められません。ブロックする「Console.ReadKey」を使用するか ( http://msdn.microsoft.com/en-us/library/system.consolekeyinfo.key.aspxを参照)、コンソールをオフライン モードに切り替えることができます。この AC# の例は、http: //ewbi.blogs.com/develops/2005/11/net_console_pre.htmlにあります。

于 2012-07-01T17:45:47.520 に答える