Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Console.Read()直到eof_C#_Int_Eof - Fatal编程技术网

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@Greg
Console.Read()
返回一个
int
@KingstonJoshua corrected。返回值为-1,在-1工作之前不为零读取,谢谢!从技术上讲,您可以使用
int?
,该值可为空。但在eof之前不读取它,只是为了zero@Greg
Console.Read()
返回一个
int
@KingstonJoshua更正。返回值是-1,直到-1才是零读,谢谢!我想这有点过分了,LOL。@Andrew这是通用的,因为使用TextReader可以为文件和控制台初始化。它很懒,没有拆分方法的开销。而且我也不太了解源代码问题然后我尝试添加完整答案。我想这有点过头了,哈哈。@Andrew well这是通用的,因为使用TextReader可以对文件和控制台进行初始化。它很懒,并且没有拆分方法的开销。另外,我不太理解源问题,然后我尝试添加完整答案。