Kurs C++ częśd II – Podstawowa obsługa konsoli + zmienne. Autor
Transkrypt
Kurs C++ częśd II – Podstawowa obsługa konsoli + zmienne. Autor
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.