C# 检查控制台输出的每个值

C# 检查控制台输出的每个值,c#,C#,我想一个接一个地读每一个值,每一个值,直到他们按下一个值结束“输入检查” 我已经检查了其他几篇文章,但没有一篇对我有效,因为我不想使用数组或列表,必须检查一次该值,如果发生这种情况,则使用该值 我已设法做到这一点: char END = '#', value; bool found= false; int count = 0; Console.WriteLine("Write a line ending in '#'."); value = Conver

我想一个接一个地读每一个值,每一个值,直到他们按下一个值结束“输入检查”

我已经检查了其他几篇文章,但没有一篇对我有效,因为我不想使用数组或列表,必须检查一次该值,如果发生这种情况,则使用该值

我已设法做到这一点:

    char END = '#', value;
    bool found= false;
    int count = 0;

    Console.WriteLine("Write a line ending in '#'.");
    value = Convert.ToChar(Console.Read());
    if (value == END) 
        found = true;

    while (!found) 
    {
        count++;
        value = Convert.ToChar(Console.Read());
        if (value == END) 
            found = true;
    }
}
Console.WriteLine("You have typed " + count);

您应该使用StringBuilder对象,您可以逐个添加字符。我也简化了你的逻辑很多

    char END = '#';
   var sb = new StringBuilder();
    Console.WriteLine("Write a line ending in '#'.");

    while (true) 
    {
        var ch = Convert.ToChar(Console.Read());
        if (ch == END) 
            break;
        sb.Append(ch)
    }
}
Console.WriteLine("You have typed " + sb.ToString());

您应该使用StringBuilder对象,您可以逐个添加字符。我也简化了你的逻辑很多

    char END = '#';
   var sb = new StringBuilder();
    Console.WriteLine("Write a line ending in '#'.");

    while (true) 
    {
        var ch = Convert.ToChar(Console.Read());
        if (ch == END) 
            break;
        sb.Append(ch)
    }
}
Console.WriteLine("You have typed " + sb.ToString());
像这样的

static void Main(string[] args)
{
    StringBuilder sb = new StringBuilder();
    Console.WriteLine("Write a line ending in '#'.");
    ConsoleKeyInfo keyInfo;
    do
    {
        keyInfo = Console.ReadKey();

        // Evaluate Input Key
        if (int.TryParse(keyInfo.Key.ToString(), out int i))
        {
            ; // do something with an int
        }
        else
        {
            ; // do something with char 
        }

        if (keyInfo.KeyChar != '#') 
        {
            sb.Append(keyInfo.KeyChar);
        }
    }
    while (keyInfo.KeyChar != '#');

    Console.WriteLine();
    Console.WriteLine($"You typed '{sb.ToString()}' which is {sb.Length.ToString()} character(s).");
    Console.WriteLine("Press any key to exit.");
    Console.ReadLine();
}
像这样的

static void Main(string[] args)
{
    StringBuilder sb = new StringBuilder();
    Console.WriteLine("Write a line ending in '#'.");
    ConsoleKeyInfo keyInfo;
    do
    {
        keyInfo = Console.ReadKey();

        // Evaluate Input Key
        if (int.TryParse(keyInfo.Key.ToString(), out int i))
        {
            ; // do something with an int
        }
        else
        {
            ; // do something with char 
        }

        if (keyInfo.KeyChar != '#') 
        {
            sb.Append(keyInfo.KeyChar);
        }
    }
    while (keyInfo.KeyChar != '#');

    Console.WriteLine();
    Console.WriteLine($"You typed '{sb.ToString()}' which is {sb.Length.ToString()} character(s).");
    Console.WriteLine("Press any key to exit.");
    Console.ReadLine();
}

“控制台输入值”是什么意思?您是要逐字符串读取还是逐字符读取?我改为输出。谢谢@DmitryBychenko。我想一个字符一个字符地读,或者在另一种情况下,一个字符一个字符地读,你说的“控制台输入值”是什么意思?您是要逐字符串读取还是逐字符读取?我改为输出。谢谢@DmitryBychenko。我想逐字符阅读,或者在另一种情况下,逐字符阅读。目的是帮助彼此学习。OP对此似乎很陌生,因此引入StringBuilder并不对您的任何更改进行解释并没有真正的帮助。这与积分无关……谢谢@pm100。我相信这绝对是最好的解决方案,而且有很大的改进。但是现在,有没有一种更基本的方法,类似于我的。。?可能我遗漏了一些非常低级的编码。。基本上,我不知道带着我们从未用过的东西去上课是否合适,很明显,这不是我创造的。。我希望您理解我的意思。@Raül您可以通过连接字符串(
someString+=ch;
)以更慢、效率更低的方式构建字符串。对于您的类来说,这应该是足够基本的,如果您想显示最后的
字符串
,这确实是唯一的其他方法。如果你只想知道不同故事的字符数Hello@maccettura,我不想显示任何字符串。我只想数一数在“END”标记之前有多少个字符。如果你只想数一数,那么你的原始代码就可以了,除了改为使用我的循环stlye只读取一个字符外。目标是帮助彼此学习。OP对此似乎很陌生,因此引入StringBuilder并不对您的任何更改进行解释并没有真正的帮助。这与积分无关……谢谢@pm100。我相信这绝对是最好的解决方案,而且有很大的改进。但是现在,有没有一种更基本的方法,类似于我的。。?可能我遗漏了一些非常低级的编码。。基本上,我不知道带着我们从未用过的东西去上课是否合适,很明显,这不是我创造的。。我希望您理解我的意思。@Raül您可以通过连接字符串(
someString+=ch;
)以更慢、效率更低的方式构建字符串。对于您的类来说,这应该是足够基本的,如果您想显示最后的
字符串
,这确实是唯一的其他方法。如果你只想知道不同故事的字符数Hello@maccettura,我不想显示任何字符串。我只想数一数在“END”标记之前有多少个字符。如果你只想数一数,那么你的原始代码就可以了,除了更改为使用我的循环stlye只有一个读取状态