Witaj
Na sam początek zapoznaj się z funkcją getchar() w dokumentacji
Co ona mówi?
Reads the next character from stdin.
Czyli po prostu mamy sobie bufor wejścia, z którego wczytywany jest kolejny znak.
Dane są wczytywane, aż nie zostanie napotkany biały znak (na przykład "Enter"). Może się też zdarzyć tak, że tym kolejnym znakiem, który wczyta getchar() będzie właśnie znak nowej linii, czyli Enter. W tym celu zastosowano tutaj getchara dwa razy (gdyby pojawił się raz, z bufora zostałby zczytany właśnie ten enter i nic poza nim).
P.S.
Po pierwsze, proszę umieszczać kod w specjalny bloczek - wszystko na ten temat jest naszym FAQ
Po drugie, mam prośbę. Jeśli to możliwe, to starajcie się nie używać następujących "narzędzi":
- Biblioteki <windows.h> - Tobie w tym kodzie nie jest to absolutnie potrzebne, nie wiem dlaczego pan Mirek w swoim tutorialu pokazywał, żeby tego używać (dlaczego nie radzę, o tym będzie za chwilę)
- Biblioteki <conio.h> - tak, wiem że tam jest getch(), ale mimo wszystko też nie polecam
- Wywołania funkcji system() -> w twoim przypadku system("cls");
- Dyrektywy using namespace - o tym też za moment
Dlaczego? Trzy pierwsze "narzędzia" uniemożliwiają przenośność kodu - program będzie działał tylko pod systemem Windows. To nie jest fajne, bo w większości przypadków wystarczą niewielkie zmiany, aby kod był przenośny i zgodny ze standardem języka C++. Wtedy będzie można go odpalić na praktycznie każej platformie i każdym systemie, na którym istnieje kompilator w pełni (lub choćby częściowo) wspierający standard języka C++. Czyż to nie piękne?
Co do dyrektywy using namespace - ja wiem, że na początku wydaje się ona taka fajna - no bo przecież ileż to mniej ciągłego pisania tych std::. Ale pomyślmy logicznie - nie po to ktoś wprowadził pojęcie przestrzeni nazw, żeby je zaraz kompletnie zignorować. Wiem, że to tak małe programy, że użycie tego teoretycznie nie zaszkodzi. Ale moim zdaniem warto wpajać dobre praktyki już na samym początku nauki - przecież to tak mało kosztuje. Stosowanie tej dyrektywy, może doprowadzić do kolizji nazw.
Powiedzmy, że chcę zrobić własną implementację klasy std::string. Tworzę więc własną klasę string i umieszczam ją w mojej własnej przestrzeni nazw, nazwijmy ją dla przykładu my. Teraz mam dwie klasy string: std::string, oraz my::string. Kolizji nazw nie ma. A co się stanie, kiedy użyjemy dyrektyw using namespace dla obu przestrzeni nazw? No właśnie ;)
O ile używanie using namespace lokalnie jeszcze nie jest najgorsze, o tyle umieszczania jej globalnie w plikach nagłówkowych nie skomentuję... Dlatego zawczasu przestrzegam przed tym.
Pozdrawiam