C# 当没有字符保留时,如何从stdin读取?
我正在编写一个与Java类似的基本C# 当没有字符保留时,如何从stdin读取?,c#,.net,stdin,textreader,C#,.net,Stdin,Textreader,我正在编写一个与Java类似的基本Scanner类。以下是我所拥有的(好吧,相关部分): 使用System.Text; 使用System.Collections.Generic; 名称空间系统.IO { /// /// ///扫描器是一个包装的 ///实例,使读取某些类型的值更容易 ///还利用了 ///班级。 /// /// /// 公共类扫描仪 { 私人文本阅读器; 专用队列字符缓冲区=新队列(); /// /// ///默认为从中读取 ///
Scanner
类。以下是我所拥有的(好吧,相关部分):
使用System.Text;
使用System.Collections.Generic;
名称空间系统.IO
{
///
///
///扫描器是一个包装的
///实例,使读取某些类型的值更容易
///还利用了
///班级。
///
///
///
公共类扫描仪
{
私人文本阅读器;
专用队列字符缓冲区=新队列();
///
///
///默认为从中读取
///
///
公共扫描仪():此(Console.In)
{
}
公共扫描仪(文本阅读器)
{
这个。读者=读者;
}
公共字符Peek()
{
如果(this.CharacterBuffer.Count>0)
返回此.CharacterBuffer.Peek();
尝试
{
返回Convert.ToChar(this.Reader.Peek());
}
捕获(溢出例外)
{
抛出新的EndOfStreamException();
}
}
公共字符ReadChar()
{
如果(this.CharacterBuffer.Count>0)
返回此.CharacterBuffer.Dequeue();
尝试
{
返回Convert.ToChar(this.Reader.Read());
}
捕获(溢出例外)
{
抛出新的EndOfStreamException();
}
}
}
}
从我运行的几个测试来看,这对于真实文件非常有效,但是对于stdin它并不像预期的那样有效。如果我使用Scanner.Peek
或Scanner.ReadChar
,则在发送换行符后,TextReader
实例认为它位于文件末尾(我认为),并抛出EndOfStreamException
实例,因为this.Reader.Read
和this.Reader.Peek
返回-1
如何在仍然支持true文件和
StringReader
实例的情况下强制它请求新字符?我更改了Peek
以反映以下代码。我不确定这是否是100%,因为我直接在这里从内存中键入了这个
public char Peek()
{
if (this.CharacterBuffer.Count > 0)
return this.CharacterBuffer.Peek();
char Character
try
{
Character = Convert.ToChar(this.Reader.Read());
}
catch (OverflowException)
{
throw new EndOfStreamException();
}
this.CharacterBuffer.Enqueue(Character);
return Character;
}
检查
-1
并对其进行“阻止”有什么错?你是说我为什么使用try-catch?
public char Peek()
{
if (this.CharacterBuffer.Count > 0)
return this.CharacterBuffer.Peek();
char Character
try
{
Character = Convert.ToChar(this.Reader.Read());
}
catch (OverflowException)
{
throw new EndOfStreamException();
}
this.CharacterBuffer.Enqueue(Character);
return Character;
}