Kurs C++ częśd II Podstawowa obsługa konsoli + zmienne. Autor: Dawid Chróścielski. Wprowadzanie i wyprowadzanie danych z/do konsoli. Jak wyprowadzad dane dowiedzieliśmy się już wcześniej (metoda cout z przestrzeni nazw std ). Nowym jest dla nas wprowadzanie ich. Służy do tego metoda cin (od angielskiego console input). Przykład zastosowania: // Wprowadzanie i wyprowadzanie danych z/do konsoli #include <iostream> using namespace std; // *1 int wiek; char imie[20]; // ----------- int main() { cout << "Podaj swoje imie: "; cin >> imie; // *2 cout << "Podaj swoj wiek: "; cin >> wiek; // *3 } cout << "Twoje imie to: " << imie << endl // *4 << "Twoj wiek to :"; // *5 cout << wiek << "\n"; // *6 system("pause"); return 0; Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy: *1 są to deklaracje zmiennych (zajmiemy się tym w następnym paragrafie), które wprowadzamy do konsoli. *2 jest to wywołanie funkcji cin (po niej następują znaki strumienia wejścia >> ). Jako argument, do którego wpisana zostanie wartośd (w tym przypadku napis) podajemy zmienną imie. Przechowuje ona w sobie dane, które do niej za pomocą procedury cin wpisaliśmy. *3 prawie to samo co w *2, jednak tym razem wprowadzamy zmienną o typie liczbowym, co oznacza, że możemy tam zapisad nasz wiek w postaci liczby, nie jako napis (to zasadnicza różnica dla komputera).
*4 chciałem tutaj pokazad, jak można łączyd strumienie, które chcemy wyprowadzid z konsoli. Wystarczy rozdzielid poszczególne elementy znakami strumienia wyjścia ( << ). W ten sposób w jednej linijce wypisaliśmy napis Twoje imię to:, zmienną imie oraz znak przejścia do następnej linii. *5 przenieśliśmy komendę do następnej linii, żeby wszystko się mieściło na ekranie, znów użyliśmy <, aby wypisad nowy strumieo i zakooczyliśmy funkcję cout średnikiem. *6 wywołujemy funkcję cout jeszcze raz (dla przykładu, że można i tak dołączad strumienie wyjścia, co jest przecież logiczne), wypisujemy zmienną liczbową wiek oraz znak \n, który oznacza to samo co endl, jednak zawarty i zinterpretowany jest w ciągu znaków. Aby uzyskad więcej znaków specjalnych typu \n, należy wpisad hasło Znaki specjalne C++ do wyszukiwarki. Zmienne. Czym są zmienne? Są to wartości przechowywane w pamięci posiadające swoją charakterystyczną nazwę. Każda zmienna posiada swój unikalny adres oraz nazwę, wartości mogą się powielad. Jak w C++ deklarujemy zmienną? typ nazwa; Jak definiujemy? nazwa = wartośd; Czym różni się deklaracja od definicji? Deklaracja to zakomunikowanie kompilatorowi, że dany obiekt (np. zmienna) istnieje w programie i istnieje możliwośd jej użycia. Definicja natomiast to nadanie jej wartości. Deklarację z definicją możemy łączyd: typ nazwa = wartośd; Wartości jakie przybiera dana zmienna zależne są od jej typu. Przykładowo dla typu liczbowego, zmienna przybiera wartośd liczbową (np. int zmienna = 5;). Wartośd zmiennej nie może przekroczyd zakresu wartości jakie dany typ przewidział. Np. zmienna typu unsigned char nie może przyjąd wartości 300, gdyż wykracza to poza zakres jej typu.
Typy zmiennych: źródło: http://m4tx.pl/wp-content/uploads/2010/08/table.png Przy typach podstawowych, kompilator często konwertuje jeden typ, do drugiego, gdy chcemy je np. porównad, wykonad operację dodawania, przypisad, itd. Zawsze konwertuje typ bardziej złożony do bardziej podstawowego. Robi to jednak niejawnie i może w tych miejscach wypisywad ostrzeżenia o takiej sytuacji. Możemy zrobid to jawnie, są 2 sposoby: reinterpret_cast < nowy_typ> (zmienna), lub starym sposobem, znanym z C: (nowy_typ)zmienna. Aby uzyskad więcej informacji na ten temat polecam wyszukiwarkę internetową. Napiszmy przykładowy program, w którym wykorzystamy nasze zmienne. // Dodawanie #include <iostream> using namespace std; int liczba1; // *1 int liczba2, wynik; // *2 char imie[20]; // *3 int main() { cout << "Podaj swoje imie: "; cin >> imie; cout << "Podaj 1-sza liczbe: "; cin >> liczba1; cout << "Podaj 2-ga liczbe :"; cin >> liczba2; wynik = liczba1 + liczba2; // *4
} cout << "Twoje imie to: " << imie << endl; cout << liczba1 << " + " << liczba2 << " = " << wynik << endl; system("pause"); return 0; *1 czytamy: Deklaracja zmiennej typu integer *2 jeżeli zmienne są tego samego typu, możemy deklarowad je po przecinku, koocząc średnikiem. Możemy również wykonywad definicję, czyli nadad im wartości początkowe. Również w miejscu deklaracji. Definicja taka wyglądałaby tutaj np. tak: int liczba2 = 20, wynik = 25; Jednak, później w kodzie następuje ponowne wpisanie wartości, więc nie ma potrzeby wpisywania ich na początku, gdyż i tak zostaną nadpisane przez nowe. Przykładowo, gdybyśmy w późniejszym wywołaniu cin >> liczba2 podali wartośd 22, wówczas zmienna liczba2 od tego miejsca zwracałaby wartośd 22. *3 jest to deklaracja zmiennej tablicowej typu char. Zajmiemy się tym nieco później. *4 użyliśmy tutaj 2 operatorów: przypisania = oraz dodawania +. Chyba nie muszę tłumaczyd do czego służą. Wytłumaczę natomiast jak działają. Operator przypisania służy nadaniu wartości wyrażeniu stojącemu po stronie lewej operatora, z wyrażenia, które stoi po jego prawej stronie. W tym przypadku zmiennej wynik przypisujemy wartośd wyrażenia liczba1 + liczba2. Gdybyśmy spotkali na przykład taką instrukcję: wynik = liczba1 = liczba2; Wówczas liczba2 przekazuje wartośd liczbie1 przez operator przypisania. Następnie liczba1 przekazuje swoją wartośd (czyli już tą samą co liczba2) do zmiennej wynik. Operator dodawania sumuje stojące po jego obu stronach wyrażenia. Zakres dostępu i życie zmiennych. Zmierzyd musimy się tu z dwoma zagadnieniami: Zmienne globalne są to obiekty dostępne w całym pliku od miejsca ich zadeklarowania. Muszą byd one zadeklarowane poza wszystkimi funkcjami, przestrzeniami nazw, pętlami, itd. Do tej pory posługiwaliśmy się w programach właśnie takimi zmiennymi. Były one deklarowane na zewnątrz funkcji main, lecz przypisanie im wartości znajdowało się już w tej metodzie. Początkowo jednak wszystkie zmienne globalne przyjmują zależnie od typu: NULL, 0 lub false. Są więc wypełniane neutralnymi wartościami początkowymi. Obiekty deklarowane globalnie istnieją w naszym programie od jego startu, do zakooczenia.
Zmienne lokalne tu z kolei, póki nie nadamy wartości sami, przechowywane są wewnątrz śmieci, czyli wartości losowe. Przykład zmiennej lokalnej uzyskamy, deklarując wewnątrz naszej funkcji main jakąś zmienną. Do tak zdeklarowanego obiektu mamy dostęp jedynie wewnątrz tej funkcji, a czas przez jaki on istnieje, to czas od startu funkcji, do jej zakooczenia. Wewnątrz funkcji main, nie wynika z tego nic, gdyż jest to metoda główna programu, więc jej zakooczenie jest równe z zamknięciem pracy programu, jednak to nie jest jedyna funkcja, z jaką przyjdzie się nam zmierzyd.