Foreach双倍或三倍

时间:2013-06-17 13:24:45

标签: c# .net arrays random foreach

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lotto
{
class Program
{

    static void Main(string[] args)
    {
        char k = 'l';
        while (!(k == 'k'))
        {
            Random rnd = new Random();
            int[] tablica = new int[6];
            for (int i = 0; i < 6; i++)
            {

                    tablica[i] = 0;

            }
                for (int i = 0, z; i < 6; i++)
                {
                   {
                    z = rnd.Next(1, 49);
                    while (tablica.Contains(z))
                    {
                        z = rnd.Next(1, 49);
                    }
                    tablica[i] = z;
                }
            }
            Array.Sort(tablica);
            foreach (int q in tablica)
            {
                Console.Write(q);
                Console.Write(", ");
            }
            k = Convert.ToChar(Console.Read()) ;
            Console.WriteLine("\n\n\n");
        }
    }


    }
 }

它运作正常。当我使用逐步点击(视觉工作室中的F10)时,它运行正常。但是当我正常运行时,那么

之后
k=Convert.ToChar(Console.Read());

当我提供'k'时,程序按预期停止。

当我什么都不提供的时候
 foreach (int q in tablica)
        {
            Console.Write(q);
            Console.Write(", ");
        }
        k = Convert.ToChar(Console.Read()) ;
        Console.WriteLine("\n\n\n");

两次,当我提供“k”以外的任何东西时,它会做三次。 What.The.Hell。

3 个答案:

答案 0 :(得分:6)

Console.Read从输入流(doc)一次读取一个字符。当您按Enter键时,您将提供两个字符:\r然后\n,因此在暂停以进一步输入用户信息之前,有两个字符需要阅读。

我很困惑当你使用F10时它是如何运行的,因为我这样做是为了看看什么是循环,我恰好在提供“没有”时使用 Enter 并看到字符弹出

答案 1 :(得分:1)

您是否尝试从Console.Read()捕获输入并查看它给您的内容?它可能与读入的控制字符有关,而且无法正确转换为char。

另外,完全不谈,我建议重新格式化你的代码(你在第二个for循环中有多余的“{}”)。此外,为变量提供有意义的名称始终是一种好习惯。 i,j,k等没有固有的含义。将来重构/维护代码会更容易。

我没有仔细查看其余代码,但我猜测有更短/更简单的方法可以做很多事情。在一个方法中,这个for / foreach / while循环有很多代码气味。

答案 2 :(得分:1)

使用Console.Read(),您实际上是在输入加"\r\n",所以当您使用ENTER时,只需输入"\r\n"(2个字符),当您输入字符“m”时,你的输入是“m \ r \ n”(3个字符),这就是为什么存在“一个”差异的原因。

此外,为什么要使用int i = 0, z;, z对此没有任何意义,因为这是C ++的用法。