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。
答案 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 ++的用法。