Strona główna » Kursy » Kurs C# » Dane z/na konsole
 

Dane z/na konsole

Wstęp

Aplikacja konsolowa pozwala na utworzenie programu, który wczyta od użytkownika pewne dane i może wypisać wynik. W tym artykule zostaną przedstawione podstawowe sposoby na wczytanie danych prosto z konsoli, a następnie ich wypisanie poprzez odpowiednie ich sformatowanie.

Wczytywanie danych

Przed przystąpieniem do wczytywania czegokolwiek należy sobie zdać sprawę, że program musi mieć gdzie wczytane dane zapisać. Oznacza to, że chcąc wczytać tekst musimy zadeklarować zmienną typu string, a jak np. liczbę całkowitą to zmienną typu int. Dane zapisane do wybranej zmiennej można odczytać odwołując się do tej zmiennej.

Tekst

Wszystkie dane, które będą pobierane z konsoli będą tekstem. Na początek zadeklarujmy zmienną typu string. Potem przypiszmy do niej tekst, który został wpisany na konsolę. Można go uzyskać poprzez wywołanie metody ReadLine() na obiekcie Console. Metoda ta pobiera wszystkie dane, które zostały wpisane zanim użytkownik nacisnął przycisk ENTER. Na koniec możemy potwierdzić wczytanie danych poprzez ich wypisanie:

  1.   string str;
  2.   str = Console.ReadLine();
  3.   Console.WriteLine("Wczytano: " + str);

Dwie pierwsze linijki można razem połączyć, aby zadeklarować zmienną i od razu przypisać do odpowiedniej zmiennej. W (3.) linijce została pokazana metoda łączenia tekstów - wystarczy w tym celu użyć znaku +. Uwaga: w przypadku łączenia tekstu i liczby należy najpierw liczbę zamienić na tekst, aby uniknąć niespodziewanych wyników.

Liczba Całkowita

Znając już sposób na wczytywanie tekstu z konsoli można przejść do wczytywania równie popularnego typu danych w komunikacji z użytkownikiem, a mianowicie liczbą całkowitą. Na początek zdeklarujmy nową zmienną typu int, a potem wczytajmy do zmiennej typu string tekst z konsoli. Podczas próby przypisania wczytanego tekstu do zmiennej typu int pojawi się błąd konwersji. Przed taką próbą należy dane przekonwertować. Służy do tego klasa Convert. Wywołując odpowiednią jej metodę można przeformatować prawie każdy typ na każdy. W celu dokanania konwersji tekstu na typ liczb całkowitych należy wywołać metodę ToInt32() i jako argument podać wczytany tekst z konsoli.

  1.   int i;
  2.   str = Console.ReadLine();
  3.   i = Convert.ToInt32(str);

Wszystkie przedstawione linijki można połączyć w jedną, aby kod stał się bardziej przejrzysty. Nie istnieje potrzeba zapisywania wszytanego tekstu najpierw do zmiennej. Można ją przekazać bezpośrednio do metody ToInt32(), a jej wynik przypisać do utworzonej wcześniej liczby.

Wypisywanie danych

Wzór wypisania

W przedstawionym wcześniej kodzie wczytaliśmy liczbę, ale jej nie wypisaliśmy. W języku C# istnieje możliwość wygodnego formatowania tekstu. Polega to na tym, że jako pierwszy argument np. podczas wypisywania na konsolę podajemy wzór treści, a potem kolejne argumenty jako wartości, które mają zostać wstawione do wzoru. We wzorze wolno używać wszystkich znaków, ale wszystkie fragmenty "{..}" zostaną zamienione na wartość argumentu podanego na pozycji, którą się wpisuje zamiast kropek.

Przykładowo w celu wypisania wczytanej liczby wystarczy poniższy fragment kodu:

  1.   Console.WriteLine("Wczytano: {0}", i);

Należy tu zauważyć, że pierwszy argument po wzorze odpowiada wstawieniu w miejsce "{0}", więc numerowanie dodatkowych argumentów zaczyna się od 0.

Wstawianie kilku wartości

Jak pewnie można się spodziewać tworzenie wzoru jest bardzo wygodnym rozwiązaniem, ponieważ pozwala na dodawanie większej ilości pozycji pod które zostaną wstawione określone wartości. Przykładowo w celu wypisania trzech kolejnych liczb zaczynają od pewnej wartości a wystarczy poniższy kod:

  1.   int a = 3;
  2.   Console.WriteLine("Kolejne liczby to: {0}, {1}, {2}", a, a + 1, a + 2);
  1. Kolejne liczby to: 3, 4, 5

Podstawiane wartości mogą być wyliczane "w locie". Oznacza to, że nie trzeba wcześniej przeprowadzić obliczeń i w miejsce argumentu można podać tylko nazwę zmiennej. Przekazywaną wartość można dowolnie modyfikować. Należy jednak pamiętać, że na koniec musi zostać przekazany typ danych, który program będzie umiał zamienić na tekst.

Formatowanie wypisywanych liczb

Podczas nauki wypisywania danych na konsolę warto wspomnieć, że można określić w jaki sposób ma zostać sformatowana wypisywana dana. Podstawowym sposobem formatowania wypisywanych danych służy po wpisaniu indeksu argumentu do wstawienia dodanie dwukropka i wpisanie literki, która oznacza konkretny sposób sformatowania wypisywanych danych.

Domyślnie jest to literka "G", która tylko wypisuje liczbę. Wartymi uwagi są jeszcze modyfikatory "C" do wypisywania wartości pieniężnej oraz "E" do wypisania wyniku w notacji naukowej co obrazuje poniższy kod:

  1.   Console.WriteLine("(E) b = {0:E}", b);
  2.   Console.WriteLine("(C) b = {0:C}", b);
  1. (E) b = 3,140000E+000
  2. (C) b = 3,14 zł

Przedstawione wyniki dotyczące formatowania danych pieniężnych mogą się różnić, ponieważ zależy to od wybranej kultury systemu Windows. Oczywiście istnieje możliwość zablokowania waluty na jednej konkretnej, ale zostanie to opisane w dalszej części kursu.

Podsumowanie

Sprawne kodowanie wczytywania oraz wypisywania danych pozwala na pisanie przyjaznych programów dla użytkownika, które piszą co ma podać. Pozwala to również na szybkie przetestowanie działanie programu np. wypisanie konwertowanych danych na konsolę w celu sprawdzenia ich poprawności.

Zadania

Zadanie 1

W poniższym programie popraw wzór tak, aby wypisał liczbę 12321, ale wykorzystaj do tego wartości przekazane do Console.WriteLine(). Nie wpisuj liczby bezpośrednio do wzoru.

  1. static void Main(string[] args) {
  2.   int a = 2;
  3.   int b = 3;
  4.   Console.WriteLine("[Tutaj wzór]", a, b, b - a);
  5.   Console.ReadKey();
  6. }

Zadanie 2

Napisz program, który wczyta od użytkownika dwie liczby, a następnie wypisze na konsole matematyczny zapis dodawania. Pamietaj o czytelnych komunikatach dla użytkownika. Przykładowo po wpisaniu liczby 2 i 3 program powinien wypisać:

  1. 2 + 3 = 5