C# Console.Read()直到eof
我必须从控制台读取整数,以白色字符分隔,直到文件结束,但我不知道如何读取,我搜索答案,但找不到C# Console.Read()直到eof,c#,int,eof,C#,Int,Eof,我必须从控制台读取整数,以白色字符分隔,直到文件结束,但我不知道如何读取,我搜索答案,但找不到 while((x = Console.Read()) != null) int值不可为空。你必须用负数 while((x = Console.Read()) != -1) int值不可为空。你必须用负数 while((x = Console.Read()) != -1) 请注意,除非执行以下操作之一,否则该方法不会返回-1 以下行动: 同时按下控制修改器键和Z控制台键(Ctrl+Z),这表示文
while((x = Console.Read()) != null)
int
值不可为空。你必须用负数
while((x = Console.Read()) != -1)
int
值不可为空。你必须用负数
while((x = Console.Read()) != -1)
请注意,除非执行以下操作之一,否则该方法不会返回-1
以下行动:
- 同时按下控制修改器键和Z控制台键(Ctrl+Z),这表示文件状态结束
- 按表示文件状态结束的等效键,如Windows中的F6功能键
- 将输入流重定向到具有实际文件结尾字符的源,如文本文件。
static void Main(string[] args)
{
foreach (int i in Read(Console.In))
{
Console.WriteLine(i);
}
}
static IEnumerable<int> Read(TextReader rdr)
{
int ch;
bool neg = false;
int value = 0;
int count = 0;
while ((ch = rdr.Read()) != -1)
{
if (char.IsWhiteSpace(ch))
{
if (count > 0)
yield return neg ? -value : value;
count = 0;
value = 0;
neg = false;
}
else if (count == 0 && ch == '-')
{
neg = true;
}
else if (ch >= '0' && ch <= '9')
{
count++;
value = value*10 + (ch - '0');
}
else
throw new InvalidDataException();
}
if (count > 0)
yield return neg ? -value : value;
}
static void Main(字符串[]args)
{
foreach(int i in Read(Console.in))
{
控制台写入线(i);
}
}
静态IEnumerable读取(TextReader rdr)
{
int-ch;
布尔负=假;
int值=0;
整数计数=0;
而((ch=rdr.Read())!=-1)
{
if(char.IsWhiteSpace(ch))
{
如果(计数>0)
收益率-收益率-负值:值;
计数=0;
数值=0;
neg=假;
}
else如果(计数==0&&ch='-')
{
负=真;
}
else if(通道>='0'&&通道0)
收益率-收益率-负值:值;
}
请注意,除非执行以下操作之一,否则该方法不会返回-1
以下行动:
- 同时按下控制修改器键和Z控制台键(Ctrl+Z),这表示文件状态结束
- 按表示文件状态结束的等效键,如Windows中的F6功能键
- 将输入流重定向到具有实际文件结尾字符的源,如文本文件。
static void Main(string[] args)
{
foreach (int i in Read(Console.In))
{
Console.WriteLine(i);
}
}
static IEnumerable<int> Read(TextReader rdr)
{
int ch;
bool neg = false;
int value = 0;
int count = 0;
while ((ch = rdr.Read()) != -1)
{
if (char.IsWhiteSpace(ch))
{
if (count > 0)
yield return neg ? -value : value;
count = 0;
value = 0;
neg = false;
}
else if (count == 0 && ch == '-')
{
neg = true;
}
else if (ch >= '0' && ch <= '9')
{
count++;
value = value*10 + (ch - '0');
}
else
throw new InvalidDataException();
}
if (count > 0)
yield return neg ? -value : value;
}
static void Main(字符串[]args)
{
foreach(int i in Read(Console.in))
{
控制台写入线(i);
}
}
静态IEnumerable读取(TextReader rdr)
{
int-ch;
布尔负=假;
int值=0;
整数计数=0;
而((ch=rdr.Read())!=-1)
{
if(char.IsWhiteSpace(ch))
{
如果(计数>0)
收益率-收益率-负值:值;
计数=0;
数值=0;
neg=假;
}
else如果(计数==0&&ch='-')
{
负=真;
}
else if(通道>='0'&&通道0)
收益率-收益率-负值:值;
}
从技术上讲,您可以使用int?
,这是可以为空的。但在eof之前,它不会被读取zero@GregConsole.Read()
返回一个int
@KingstonJoshua corrected。返回值为-1,在-1工作之前不为零读取,谢谢!从技术上讲,您可以使用int?
,该值可为空。但在eof之前不读取它,只是为了zero@GregConsole.Read()
返回一个int
@KingstonJoshua更正。返回值是-1,直到-1才是零读,谢谢!我想这有点过分了,LOL。@Andrew这是通用的,因为使用TextReader可以为文件和控制台初始化。它很懒,没有拆分方法的开销。而且我也不太了解源代码问题然后我尝试添加完整答案。我想这有点过头了,哈哈。@Andrew well这是通用的,因为使用TextReader可以对文件和控制台进行初始化。它很懒,并且没有拆分方法的开销。另外,我不太理解源问题,然后我尝试添加完整答案。