2013-06-17 3 views
1
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"); 
     } 
    } 


    } 
} 

Все работает хорошо. Когда я использую шаг за шагом clickage (F10 в visual studio), он работает нормально. Но когда я запускаю его нормально, послеСамостоятельно удваивает или троек

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"); 

два раза, и когда я поставляю ничего, кроме «к» он делает это три раза. Какого черта.

+2

Незначительная точка: вместо '! (K == 'k')', вы можете сделать 'k! = 'K''. –

+0

http://stackoverflow.com/questions/2351308/random-number-generator-in-c-sharp-unique-values ​​ –

ответ

6

Console.Read считывает один символ за раз из входного потока (doc). Когда вы нажимаете кнопку ввода, вы отправляете два символов: \r, затем \n, поэтому перед тем, как сделать паузу для ввода нового пользователя, необходимо прочитать два символа.

Я смущен тем, как он работал нормально, когда вы использовали F10, когда я это делал, чтобы увидеть, что происходит, я просто использовал . Ввод при поставке «ничего» и просмотре персонажей.

+4

Чтобы «решить» эту «проблему», все потребности OP: 'k = Console.ReadKey () .KeyChar; ':) –

+0

yup, это сработало, спасибо Shadow Wizard^_^ –

1

Пробовал ли вы захватить ввод с Console.Read() и посмотреть, что он вам дает? Это может быть связано с чтением контрольного символа, и он не может правильно преобразовать в char.

Кроме того, полностью в стороне, я бы рекомендовал переформатировать ваш код (у вас есть лишний «{}» там во втором цикле). Кроме того, всегда хорошая практика - давать значимые имена вашим переменным. i, j, k и т. д. не имеют неотъемлемого значения. В будущем будет проще реорганизовать/поддерживать ваш код.

Я не очень пристально смотрю на остальную часть вашего кода, но я предполагаю, что есть более короткие/более простые способы сделать многое из этого. Это много для/foreach/while цикла в одном методе имеет запах кода.

1

Используя Console.Read(), вы фактически получаете ваш вклад плюс "\r\n", поэтому при использовании ENTER вы только получаете "\r\n" (2 символов), когда вы вводите символ «м», ваш вклад «м \ г \ п» (3 символа), вот почему существует «одна» разница.

Кроме того, зачем использовать int i = 0, z;? , z ничего здесь не означает, что это использование C++.

+0

int i = 0, z; объявляет int i и int z, просто так. –

Смежные вопросы