gpt4 book ai didi

c# stdin read 没有响应

转载 作者:行者123 更新时间:2023-12-02 22:31:01 25 4
gpt4 key购买 nike

我有一个监听控制台标准输入流的程序。

  • Read() 返回时,每个字符被一个接一个地读出并传递给 method()
  • method() 然后将字符附加到 StringBuilder
  • 如果字符是'\n',那么method()调用respond(),打印出读取到的字符并清除StringBuilder

但是,即使在控制台中键入内容并按下 Enter 后,我也必须在控制台焦点内按下/移动鼠标、鼠标按钮或键盘,才能回显键入的文本。更神奇的是,当我在 Main() 的第一个大括号中设置断点并进入此后的每一个语句时,程序都能正确执行。我怎样才能解决这个问题?非常感谢!

public class test
{
static byte[] buffer = new byte[1];
static Stream instrm = Console.OpenStandardInput();
static Stream outstrm = Console.OpenStandardOutput();
static System.Text.StringBuilder sb = new System.Text.StringBuilder();
static void Main()
{
while (true)
{
instrm.Read(buffer, 0, 1);
method(buffer);
}
}
public static void method(byte[] buffer)
{
sb.Append(System.Text.Encoding.UTF8.GetString(buffer));
if (buffer[0] == (byte)10) respond();
}
public static void respond()
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
outstrm.Write(bytes, 0, bytes.Length);
outstrm.Flush();
sb.Clear();
}
}

编辑:
刚测试了一下,发现跟线没关系,就把那部分拿掉了。我最初发布它是因为它是我的其他程序中的一个问题,这只是一个演示它的测试模型。

最佳答案

我会这样修改程序:

static byte[] buffer = new byte[1];
static TextReader instrm = new StreamReader(Console.OpenStandardInput());
static TextWriter outstrm = new StreamWriter(Console.OpenStandardOutput());
static StringBuilder sb = new StringBuilder();
static void Main()
{
while (true)
{
var readLine = instrm.ReadLine();
respond(readLine);
}
}

public static void respond(string line)
{
outstrm.Write(line);
outstrm.Flush();
}

它更容易并且有效。主要区别是使用 StreamReaderStreamWriter 而不是 Stream

关于c# stdin read 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com