Problem z Console.Read oraz Console.ReadLine

0

Witam,
Dopiero zaczynam swoja przygode z C# i juz na starcie napotkalem pewien problem.

A mianowicie mam takie 2 proste linijki kodu:

char wybor = (char)Console.Read();
double liczba1 = double.Parse(Console.ReadLine());

Problem polega na tym, ze nie chca one ze soba wspolpracowac. Przed podaniem liczba1 dostaje wyjatek:

[quote]An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Nieprawidłowy format ciągu wejściowego.[/quote]

Najciekawsze jest to, ze jesli zakomentuje pierwsza linijke to druga dziala bez problemu i nie dostaje zadnego wyjatku.

Zalezy mi na tym, by wybor byl pojedynczym znakiem, wiec nie chce do tego uzywac stringa (w przypadku stringa program dziala)

Bardzo prosilbym o pomoc i wyrozumialosc :)

@Edit
Zauwazylem, ze po podaniu wartosci do zmiennej wybor, musze dopisac luzne:

Console.ReadLine();

Lecz kompletnie nie rozumiem dlaczego. Jesli tego nie zrobie program albo ignoruje mi Console.ReadLine albo wyrzuca wyjatek.

2

Kod wygląda na poprawny i raczej działa.
Wpisujesz liczby z kropką/przecinkiem dziesiętnym? Bo w zależności od ustawień locali różnie mogą być liczby parsowane.
Jako że jesteś z polski, powinno zadziałać wpisanie 1,5.

edit
Console.Read wczytuje tylko jeden znak, a Ty wpisujesz pewnie znak i enter:

static void Main(string[] args) {
    for (int i = 0; i < 10; i++) {
        Console.WriteLine((int)Console.Read());
    }
}

Wynik działania po wpisaniu abc<enter>

abc // to wpisane
97 // a
98 // b
99 // c
13 // \r
10 // \n

Jeśli wpiszesz a<enter> to otrzymasz taki ciąg znaków na wejściu:
[a] [enter]

Console.Read() czyta znak [a].
Console.ReadLine() czyta /pusty napis/ (do entera).

Możesz to rozwiązać za pomocą Console.ReadKey() albo czytając całą linię i biorąc pierwszy znak.

Btw. ten problem byś sam mógł rozwiązać, gdybyś po prostu sprawdził co za napis przekazujesz do double.Parse.

0

Przy tamtym zapisie nic nie moglem wpisac, bo w momencie gdy powinienem wpisac znak do 'liczba1' wyrzucal sie wyjatek.

Pokombinuje cos z tym Console.ReadKey(), ewentualnie ReadLine();
Tylko z tego co widze to readkey nie przekaze zas do switcha (chyba)
</del>

Ok poradzilem sobie, wystarczylo zrobic cos takiego:

 char wybor = Console.ReadKey().KeyChar;

Dzieki za pomoc.

A teraz tak z ciekawosci. W takim razie kiedy uzywa sie Console.Read()? Skoro nawet jak wpisze jeden znak to musze nacisnac ten [enter], aby program ruszyl dalej...

0

w przypadku konsoli może nie ma wielkiego sensu, ale są inne strumienie np. pliki, gdzie Read() jest bardziej potrzebne.

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