Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki JavaScript

Słowa kluczowe: Typ bool w C++ cout w C++

bool gotowe=true; cout<<gotowe; Co zostanie wypisane w wyniku wykonania przedstawionych instrukcji?

bool gotowe=true;
cout<<gotowe;
Co zostanie wypisane w wyniku wykonania przedstawionych instrukcji?
A. nie
B. tak
C. 1
D. 0

Pytanie z egzaminu CKE, czerwiec 2020 (arkusz EE.09-SG-20.06).

W tym kodzie zmienna gotowe ma typ bool i została ustawiona na wartość true. W C++ wartości logiczne są wewnętrznie traktowane bardzo podobnie do liczb całkowitych: false odpowiada wartości 0, a true odpowiada wartości 1. Dlatego instrukcja cout << gotowe; domyślnie wypisze na ekranie 1, a nie słowo tak ani true. To jest standardowe zachowanie strumienia wyjściowego w C++, jeżeli wcześniej nie ustawiono modyfikatora boolalpha.

W praktyce ma to znaczenie np. przy debugowaniu programu. Jeżeli wypisujesz stan zmiennej logicznej, możesz zobaczyć 0 albo 1 i trzeba umieć to odczytać. Jeśli chcesz, żeby program wypisywał tekstowo true lub false, można użyć cout << boolalpha << gotowe;. Moim zdaniem warto znać obie wersje, bo w cudzym kodzie bardzo często spotyka się właśnie surowe 0 i 1. Dobra praktyka jest taka, żeby przy komunikatach dla użytkownika wypisywać opisowe teksty, a przy testowaniu programu 0/1 często wystarcza i jest szybkie do sprawdzenia.
Warto tutaj uważać na różnicę między wartością logiczną a tekstem wyświetlanym użytkownikowi. Typ bool w C++ przechowuje tylko dwa stany: true oraz false, ale standardowy strumień cout bez dodatkowych ustawień nie wypisuje tych stanów jako słów. Domyślnie zamienia je na reprezentację liczbową, czyli true na 1, a false na 0. Z tego powodu wynik 0 pasowałby dopiero wtedy, gdyby zmienna gotowe miała wartość false, a w pokazanym fragmencie jest jawnie ustawiona na true.

Odpowiedzi w stylu tak albo nie wynikają zwykle z mylenia języka programowania z językiem naturalnym albo z tym, jak sami opisalibyśmy warunek w komunikacie dla człowieka. Komputer nie dopisuje sobie automatycznie polskich słów. Jeżeli programista chce uzyskać napis tak lub nie, musi to sam zaprogramować, na przykład przez instrukcję warunkową: jeśli gotowe jest true, wypisz tak, w przeciwnym razie wypisz nie. Podobnie słowa true i false też nie pojawią się standardowo, chyba że użyje się modyfikatora boolalpha, czyli np. cout << boolalpha << gotowe;. Z mojego doświadczenia ten temat często myli się na początku nauki, bo bool wydaje się typem bardzo prostym, a jednak sposób jego prezentacji na ekranie zależy od mechanizmu strumienia wyjściowego. W testach i w praktycznym kodowaniu trzeba więc oddzielać samą wartość zmiennej od formy, w jakiej cout ją pokazuje.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.