2016-03-23 25 views
0

ikinci açıklamaya geçmeden önce, ilk deyimi üç kez döngüler bu do-while C# konsol uygulamasında döngü:C# döngü yazdım gelmiş

do 
{ 
    ThisHelp.ShowMenu(); 
    userChoice = (char) Console.Read(); 
    ThisHelp.Helpon(userChoice); 
}while(ThisHelp.IsValid(userChoice) == false); 

Write + WriteLine sadece bir grup var ThisHelp.ShowMenu() yöntem Kullanıcının 1'den 8'e kadar bir sayı yazmasını isteyen yöntemler. ThisHelp.Helpon() yöntemi, kullanıcı girişine bağlı olarak, farklı bir metin parçası gösteren bir anahtara sahiptir. Kullanıcı bir numarayı yazar ve ENTER tuşuna sonra döngünün ilk bildirimi ikinci ifade çalışmasından önce 3 kez yürütür: yöntem ThisHelp.IsValid sadece kullanıcı giriş 8. Burada

1 arasında bir sayı problem olduğunu kontrol eder en azından bir kere. Bu neden oluyor?

düzenleme:

public bool IsValid(char ch) 
{ 
    if (ch < '1' | ch > 8 & ch != 'q') return false; 
    else return true; 
} 
+0

Sen kullanmalıdır 'int.Parse (Console.ReadLine())' Eğer çalıştırmadan önce giriş doğrulamak zorunda yerine '(char) Console.Read()' –

+0

Dont ' ThisHelp.Helpon (userChoice); 'yöntem? – DCruz22

+0

@ DCruz22 Kullanıcının geçersiz bir karakter girmesi durumunda, 'ThisHelpon (userChoice);' yöntemi hiçbir şey yazdırmaz ve yürütme, amaçlandığı gibi döngüden dışarı atlayacaktır. Bunu farklı bir şekilde yapabilirdim, ancak egzersiz yapmak için zaman döngüsünü kullanmam gerekiyordu, ben de bunu yaptım. –

cevap

5

, numarasını döndürür. Bu kullanıcı karakterini girer. o da presler ENTER 8 ve girerse Yani üç karakter olsun:

  • 8
  • \r (satırbaşı) ve
  • \n (yeni hat)

Sen yerine kullanabilir Bu:

char userChoice = Console.ReadLine().Trim()[0]; 

Ancak boş girişler için bazı hata işleme eklediğinizden emin olun.

6

Console.Read() genellikle sadece getiri kullanıcı geri dönüşü basıldığında zaman - hangi da olacak satır başı ve satır beslemeyi işaret: istendiği gibi İşte ThisHelp.IsValid yöntemin koddur Console.Read() numaralı çağrılarla geri döndü. Her yinelemede userChoice değerini kaydederek (veya hata ayıklayıcısını inceleyerek) bunu doğrulayabilirsiniz. Tüm satırı tüketecek olan Console.ReadLine()'u aramak daha sonra, bu değeri bir tamsayıya dönüştürmek muhtemelen daha kolay olacaktır.

+0

Teşekkürler, bu işe yaradı. Ama diğer cevabı kabul ettim, çünkü o da çalıştı, ama daha az tuş vuruşlarıyla. Örneğin, yöntemlerin char türünden int'ye intleration parametrelerini değiştirmek zorundayım. –

0

Döngünün ikinci iki satırını bir taneye yerleştirmeyi deneyebilirsiniz. Böyle bir şey deneyin:

ThisHelp.Helpon(Char.Parse(Console.Readline()));