Read() blokuje ReadLine()

0

Witam ! Nadszedł czas na naukę C#.

W ramach testów postanowiłem zrobić mały dialog ze wczytywaniem danych w konstruktorze swojej własnej klasy. Problem w tym, że gdy czytam metodą Read() to pierwsza kolejna po niej metoda ReadLine() się nie wykonuje. Pytanie dlaczego ?


klasa()
{
   int i;

   System.Console.WriteLine(s);
   i = System.Console.Read();
 
   System.Console.WriteLine(s1);
   this.s2 = System.Console.ReadLine(); // Tutaj wejdzie ale czytając 'nic' leci dakej bez enter ... 
 
}
 
1

Read() „zjada” tylko liczbę którą wpisałeś, a wciśnięcie Entera zostaje w buforze. ReadLine() napotyka ten Enter i od razu kończy.

Rozwiązaniem jest danie ReadLine po Read, albo użycie samego ReadLine:

   i = System.Console.Read();
   System.Console.ReadLine();

albo

   i = int.Parse(System.Console.ReadLine());
0

Domyślałem się, że coś w ten deseń będzie, ale nie mogłem doczytać na MSDN. Dzięki wielkie. Złatałem to czymś takim bo wpadłem właśnie na to żeby tylko ReadLine używać :

 temp=System.Convert.ToInt32(System.Console.ReadLine());

pytanie - czym prócz elegancji różni się mój sposób od Twojego ? Od strony technicznej i złożoności ?

0

Convert.ToInt32 wywołuje Parse. W działaniu różni się tym, że int.Parse gdy mu się poda null-a rzuci wyjątkiem, a Convert zwróci 0.

W tym przypadku różnicy nie będzie, bo Console.ReadLine nulla raczej nie zwróci, co najwyżej pusty string.

0

Ok thx :D Temat dla potomnych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1