Console.In是否有结束

本文关键字:结束 是否 In Console | 更新日期: 2023-09-27 18:22:14

免责声明:如果这个问题对你来说没有意义,那么;s正常。我不擅长解释东西。如果你觉得有什么不清楚的地方,请在评论中告诉我,我会编辑这个问题!对不起

实际上,我自己在写编译器/解释器。我有一个接口,使用库的客户端代码可以实现该接口,以便可以自定义语言运行时:

public interface ISplRuntime {
    object Current {
        get;
        set;
    }
    object[] Memory {
        get;
    }
    TextReader Input {
        get;
    }
    TextWriter Output {
        get;
    }
    bool Stopped {
        get;
        set;
    }
    void ShowErrorMessage (string error);
}

正如你在这里看到的,我可以用这个创建一个控制台应用程序或winforms应用程序。对于控制台应用程序,我会像这样实现InputOutput

public TextReader Input {
    get {return Console.In;}
}
public TextReader Output {
    get {return Console.Out;}
}

我在接口中有这些IO属性是因为我的语言(SPL)需要IO指令来读取输入和输出内容。因此,上面的实现基本上意味着该语言的IO链接到控制台。当SPL程序输出某个内容时,该内容将显示在控制台中。我希望你能理解。

然而,我担心Input。因为这就是我读取输入的方式:

/// <summary>
/// Reads a character from the runtime input.
/// </summary>
/// <param name="runtime">The provided runtime for providing input</param>
/// <param name="c">The character read</param>
/// <returns>True if the method successfully reads a character, false otherwise</returns>
private bool ReadFromInput (ISplRuntime runtime, out char c) {
    char stuffRead = (char)runtime.Input.Peek ();
    if (char.IsLetter (stuffRead)) {
        c = (char)runtime.Input.Read ();
        return true;
    } else {
        c = ''0';
        return false;
    }
}

如果上面的方法返回false,我还有另一段代码检查它是否已经到达文本的末尾。因为读者可能还没有到达终点。它可能读到了一个不是字母的字符。

然后我想如果我打电话给会发生什么

Console.In.Peek();

结果控制台提示我输入。所以我认为,如果runtime.Input == Console.In,它将永远要求我输入。它永远不会达到"终点"。

这是真的吗?如果是,请告诉我如何检测它的结尾。我只想要一行输入,如果读者通读了所有输入,它就会结束。我该怎么做?

如果没有,什么时候结束?

Console.In是否有结束

当你在控制台上打字时,你的电脑怎么能知道你什么时候完成了?这当然不是你"停止打字"的时候,因为你如何定义"停止"?

你可以像对待其他文本阅读器一样对待Console.In,并检查Peek

  1. 只有当用户点击Enter时,输入才会到达您的代码。它不是在逐字符的基础上发生的,而是在行级别发生的。这很方便,因为它可以让你键入一些东西,退格一点,把它调对,然后按Enter键。

  2. 你必须明确告诉计算机你的输入何时结束。这几乎总是通过按Ctrl+Z生成一个"文件结尾"字符来完成的。在此之后,您仍然需要按enter键,以便将其提交到您的代码中。

edit刚刚注意到Peek并不能真正用于控制台输入。但如果你尝试从TextReader中阅读并检查是否成功,它确实有效。对于您现有的代码来说,无论如何,这是一种更好的方法。

假设Read()会在到达文件末尾时告诉您,您应该做的是:

Attempt to read character
If successful, and character is a letter
    process the character
Else
    it's the end of the file
End If