1. Wstęp
Do tej pory pisaliśmy programy, które były jak radio: coś mówiły, ale w ogóle nie reagowały na twoje słowa. No, daleko tak nie zajedziesz! Większość programów ma na celu zrobić coś przydatnego dla użytkownika. Dlatego bardzo często trzeba, żeby użytkownik mógł coś wpisać z klawiatury.
Na przykład:
- Kalkulator czeka, aż wpiszesz liczby i operację.
- Formularze na stronie chcą twoje imię, e-mail i adres, żeby obsłużyć zgłoszenie.
- Gry komputerowe pytają o imię gracza.
Dzisiaj damy naszej aplikacji mikrofon! Albo uszy, jak kto woli :) Gotowy? Lecimy.
2. Poznajemy Console.ReadLine()
Console.ReadLine() — to funkcja (albo "komenda"), która pozwala programowi pobrać dane, które użytkownik wpisze na klawiaturze.
Kiedy program dochodzi do komendy Console.ReadLine(), zatrzymuje się i... cierpliwie czeka, aż coś wpiszesz i naciśniesz Enter. Wszystko, co wpiszesz przed Enterem, będzie traktowane jako jeden tekst. Ten tekst wraca do programu — jakby użytkownik podał ci karteczkę przez okienko.
Podstawowy przykład
// Zapytaj użytkownika o imię i przywitaj go
Console.WriteLine("Jak masz na imię?");
string userName = Console.ReadLine(); // Tutaj program czeka na wpis!
Console.WriteLine("Cześć, " + userName + "!");
Jak to działa:
- Na ekranie pojawia się: Jak masz na imię?
- Wpisujesz na przykład Andrzej i naciskasz Enter.
- Zmiennej userName przypisuje się wartość "Andrzej".
- Na ekranie pojawia się: Cześć, Andrzej!
Od razu uwaga: wszystko, co zwraca Console.ReadLine() — to ZAWSZE tekst (typ string). Nawet jeśli użytkownik wpisał liczbę, to i tak będzie tekst!
3. Przykłady
Zobaczmy, jak używa się Console.ReadLine() w praktyce.
Przykład 1: wpisujemy imię użytkownika
Console.WriteLine("Wpisz swoje imię:");
string name = Console.ReadLine();
Console.WriteLine("Witamy, " + name + "!");
Przykład 2: wyświetlamy wynik w jednym wierszu
Za pomocą operatora + możesz od razu połączyć tekst i wynik wpisu.
Console.Write("Twój ulubiony kolor: ");
string color = Console.ReadLine();
Console.WriteLine("Super! Twój ulubiony kolor to " + color + ".");
w tym przykładzie używamy Console.Write (bez przechodzenia do nowej linii), żeby wpis użytkownika był od razu po pytaniu.
Przykład 3: kilka wpisów pod rząd
Zróbmy mini-ankietę:
Console.Write("Jak masz na imię? ");
string name = Console.ReadLine();
Console.Write("Ile masz lat? ");
string age = Console.ReadLine(); // na razie jako tekst
Console.WriteLine("Nazywasz się " + name + ", i masz " + age + " lat.");
Zobaczysz:
Jak masz na imię? Wika
Ile masz lat? 23
Nazywasz się Wika, i masz 23 lat.
4. Wprowadzanie liczb: konwersja
Tutaj czai się popularna pułapka dla początkujących! Console.ReadLine() zawsze zwraca tekst, nawet jeśli użytkownik wpisał 123.
Jeśli chcesz dostać liczbę, musisz zamienić tekst na odpowiedni typ liczbowy (np. int). W C# używa się do tego metod konwersji, np. int.Parse() albo Convert.ToInt32() — już o tym mówiliśmy na poprzednim wykładzie.
Przykład: pytamy o wiek
Console.Write("Ile masz lat? ");
string input = Console.ReadLine(); // input = "27", na przykład
int age = int.Parse(input); // Zamieniamy tekst "27" na liczbę 27
Console.WriteLine("Za rok będziesz mieć " + (age + 1));
jeśli użytkownik wpisze coś, co nie jest liczbą, program wyrzuci błąd (FormatException). Później nauczymy się pisać bardziej odporne programy, ale do prostych eksperymentów to wystarczy.
5. Błędy, na które na pewno trafisz
Zapomniałeś zamienić na liczbę:
Próba użycia wartości z Console.ReadLine() jako liczby bez konwersji.
string input = Console.ReadLine();
int sum = input + 5; // Błąd! Nie można dodać tekstu do liczby.
Trzeba zamienić na int:
int sum = int.Parse(input) + 5;
Zapomniałeś zadeklarować zmienną:
name = Console.ReadLine(); // Błąd! Zmienna name nie została zadeklarowana.
Najpierw trzeba zadeklarować: string name = Console.ReadLine();
Pomyliłeś kolejność wpisu i wyjścia:
Początkujący często robią głupie błędy. Ale profesjonaliści też je robią. Tylko z mądrą miną :)
string name = Console.ReadLine();
Console.WriteLine("Wpisz imię: " + name); // Najpierw trzeba zapytać, potem przeczytać!
Prawidłowa kolejność:
Console.Write("Wpisz imię: ");
string name = Console.ReadLine();
Console.WriteLine("Cześć, " + name);
Przydatna uwaga
Nawet jeśli używasz Console.ReadLine() bez wyświetlania pytania (np. po prostu string x = Console.ReadLine();), program będzie CZEKAŁ na wpis. Ale użytkownik nie będzie wiedział, co ma wpisać! Dlatego zawsze dawaj mu jasną podpowiedź za pomocą Console.Write() albo Console.WriteLine().
GO TO FULL VERSION