Console.Read()直到eof

时间:2016-03-23 22:01:50

标签: c# int eof

我必须从控制台读取整数,用白色字符直到文件结尾,但我不知道如何,我搜索答案但我找不到它。

while((x = Console.Read()) != null)

2 个答案:

答案 0 :(得分:2)

  

请注意,除非您执行其中一个操作,否则该方法不会返回-1   以下行动:

     
      
  • 同时按下Control修饰键和Z控制台键(Ctrl + Z),这表示文件结束条件。
  •   
  • 按下指示文件结束条件的等效键,例如Windows中的F6功能键。
  •   
  • 将输入流重定向到具有实际文件结束字符的源(例如文本文件)。
  •   

MSDN Read() method

然后您可以逐个字符地读取并使用简单的数学计算每个分离的值。它的懒惰然后不会立即迭代文件到最后计算所有值。

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;  
}

答案 1 :(得分:1)

int值不可为空。你必须使用否定的。

while((x = Console.Read()) != -1)