C# Foreach将自身加倍或加倍

C# Foreach将自身加倍或加倍,c#,.net,arrays,random,foreach,C#,.net,Arrays,Random,Foreach,当我提供“k”时,程序将按预期停止。 当我什么都不提供时,它就做了 k=Convert.ToChar(Console.Read()); 两次,当我提供除“k”以外的任何东西时,它会提供三次。What.The.Hell.Console.Read一次从输入流中读取一个字符。按enter键时,您提供了两个字符:\r\n因此,在暂停以供进一步用户输入之前,有两个字符需要读取 当您使用F10时,我很困惑它如何运行良好,因为我这样做是为了查看什么是循环,我只是碰巧在不提供任何内容时使用Enter,并看到字

当我提供“k”时,程序将按预期停止。 当我什么都不提供时,它就做了

k=Convert.ToChar(Console.Read());
两次,当我提供除“k”以外的任何东西时,它会提供三次。What.The.Hell.

Console.Read一次从输入流中读取一个字符。按enter键时,您提供了两个字符:\r\n因此,在暂停以供进一步用户输入之前,有两个字符需要读取

当您使用F10时,我很困惑它如何运行良好,因为我这样做是为了查看什么是循环,我只是碰巧在不提供任何内容时使用Enter,并看到字符弹出。

Console.Read从输入流中一次读取一个字符。按enter键时,您提供了两个字符:\r\n因此,在暂停以供进一步用户输入之前,有两个字符需要读取


我很困惑,当您使用F10时,它如何运行良好,因为我这样做是为了查看什么是循环,我只是碰巧在不提供任何内容时使用Enter,并看到字符弹出。

您是否尝试从控制台捕获输入。阅读并查看它给了您什么?这可能与正在读入的控制字符有关,并且无法正确转换为字符

另外,完全抛开它不谈,我建议您在第二个for循环中重新格式化代码,因为其中有多余的{}。此外,为变量指定有意义的名称始终是一种良好的做法。i、 j、k等没有固有的含义。将来重构/维护代码会更容易


我没有仔细看你的代码的其余部分,但是我猜有一些更简短的方法来完成很多工作。一个方法中的许多for/foreach/while循环都有代码味道。

您是否尝试从控制台捕获输入。请阅读并查看它给了您什么?这可能与正在读入的控制字符有关,并且无法正确转换为字符

另外,完全抛开它不谈,我建议您在第二个for循环中重新格式化代码,因为其中有多余的{}。此外,为变量指定有意义的名称始终是一种良好的做法。i、 j、k等没有固有的含义。将来重构/维护代码会更容易

我没有仔细看你的代码的其余部分,但是我猜有一些更简短的方法来完成很多工作。一个方法中的许多for/foreach/while循环都有代码味道。

通过使用Console.Read,实际上您得到的是输入加\r\n,所以当您使用ENTER时,您只得到\r\n2个字符,当您输入一个字符时,您的输入是m\r\n3个字符,这就是为什么有一个差异的原因

此外,为什么使用int i=0,z;?在这里,Z并不意味着什么,这是C++用法。

使用控制台。读取,实际上是得到输入加R \n,所以当使用Enter时,您只得到\r\n2字符,当您输入一个符咒时,您的输入是m \r\n3字符,这就是为什么有一个区别。p>
此外,为什么使用int i=0,z;?Z并不是什么意思,因为这是C++用法。k=='k',你可以做k!='小点:代替!k=='k',你可以做k!='为了解决这个问题,OP需要的就是k=Console.ReadKey.KeyChar;:要解决该问题,OP需要的全部是k=Console.ReadKey.KeyChar;:int i=0,z;声明inti和intz,就这么简单。inti=0,z;声明inti和intz,就这么简单。
k=Convert.ToChar(Console.Read());
 foreach (int q in tablica)
        {
            Console.Write(q);
            Console.Write(", ");
        }
        k = Convert.ToChar(Console.Read()) ;
        Console.WriteLine("\n\n\n");