• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podwójne "getchar();".

Object Storage Arubacloud
0 głosów
971 wizyt
pytanie zadane 25 lipca 2016 w C i C++ przez Malin Nowicjusz (120 p.)

Witajcie. Dopiero co zaczynam się uczyć C++ z kursu M. Zelenta. W 6 części, w programie z kalkulatorem pod koniec programu dwa razy użyty był "getchar();". Trochę tego nie rozumiem. Widzę, że gdy jest jeden, to nie działa jak należy, ale czemu gdy są dwa to działa dobrze? Szukam kogoś kto mógłby mi to trochę wyjaśnić. Wiem, że służy to do "czekania na znak". Ale nie rozumiem czemu dwa razy xD Jeśli znajdzie się tu ktoś, kto mnie nie wyśmieje, proszę o pomoc.

Link: https://www.youtube.com/watch?v=ib7LXBNfZ7g

komentarz 25 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Masz na mysli getch(wybor) i getch(). No pierwsze jest poto żeby nie wciskać entera, a kolejny ma zakonczyc program. Czyli jezeli ktos kliknie 1 to wtedy zamiast klikac enter jak to jest przy if, pokaże odrazu treść
komentarz 25 lipca 2016 przez jpacanowski VIP (101,940 p.)

Wiem, że służy to do "czekania na znak".

Nie, funkcja getchar() wcale nie służy do "czekania na znak", tylko czyta znak ze standardowego wejścia i zwraca go jako wartość zwracana funkcji.

https://pl.wikibooks.org/wiki/C/getchar

komentarz 25 lipca 2016 przez jpacanowski VIP (101,940 p.)
getch() nie jest standardową funkcją.

2 odpowiedzi

+2 głosów
odpowiedź 25 lipca 2016 przez niezalogowany
Nie podałeś dokładnej minuty, więc nie wiem do końca w którym momencie to było, ale jeśli przed tymi dwoma getchar()-ami był cin, to chyba wiem o co chodzi. No więc jak wpisujesz coś do zmiennej używając cin, to musisz to zatwierdzić wciskając Enter. I ten klawisz Enter tak jakby zostaje w strumieniu, do którego się wpisuje znaki. I tego zostawionego Entera wychwytuje pierwszy getchar(), przez co nie ma czasu na zobaczenie wyniku, tylko okno konsoli by po prostu od razu zniknęło. A tak drugi getchar() temu zapobiega i żeby ten drugi getchar() coś wychwycił, trzeba jeszcze raz coś wcisnąć. To chyba takie coś było ;)

Edit: możesz się trochę zdziwić, bo mówię tu o jakichś strumieniach itp., ale zrozumiesz to, jak już skończysz kurs Pana Mirosława. Pamiętaj, to jest o wiele za mało, to jest taki wstępniak, omawiający rzeczy ogólne. Jak chcesz się nauczyć więcej, to przeczytaj jakąś książkę o C++, ja ci polecam ,,Symfonię C++", jest tam też omówiona biblioteka iostream, czyli właśnie cin, cout itp. Ale na razie nie zawracaj sobie tym głowy ;)
komentarz 25 lipca 2016 przez Malin Nowicjusz (120 p.)

Co prawda nie było przed tym cin, ale mniej-więcej zrozumiałem, dzięki wink

komentarz 25 lipca 2016 przez jpacanowski VIP (101,940 p.)
komentarz 25 lipca 2016 przez niezalogowany
No i fajnie :)
+1 głos
odpowiedź 25 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)

Prosta sprawa.. getchar() czeka na naciśnięcie klawisza.. nawet jeżeli tym klawiszem jest [Enter]. Jeżeli ostatnia wykonana przez użytkownika operacja to np. cin>>a; to siłą rzeczy by wprowadzić wartość do zmiennej [a] należy nacisnąć [Enter], który już się nie zalicza jako część wprowadzonej wartości do zmiennej.. przez co getchar() odbiera go jako naciśnięcie klawisza.. dlatego jeden nie wystarczy.
Zobacz sobie co się stanie jeżeli nie stworzysz żadnego "cin'a" i dodaj jeden getchar().. zadziała tak jak byś chciał, a dwa to będzie za dużo.
Prosty przykład.. przetestuj i sprawdź:

#include <iostream>
#include <cstdio>

//Raz odpal z komentarzami, a drugi raz bez nich

int main()
{
    int a=-1;
    //std::cin>>a;
    std::cout<<"Value a: "<<a<<"\n";
    std::getchar();
    //std::getchar();
}

 

Podobne pytania

0 głosów
3 odpowiedzi 226 wizyt
+2 głosów
0 odpowiedzi 646 wizyt
+2 głosów
1 odpowiedź 834 wizyt
pytanie zadane 11 stycznia 2020 w Nasze poradniki przez oracledev Użytkownik (620 p.)

92,631 zapytań

141,498 odpowiedzi

319,872 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...