Frish Temat założony przez niniejszego użytkownika |
POZIOM 1 - ROZDZIAŁ 12 i 13 - problem » 2013-01-28 12:34:17 Witam Mam problem, ponieważ napisałem na podstawie lekcji 12 i 13 takie coś: #include <iostream> int main() { std::cout << "Witam" << std::endl; int wiek; std::cout << "Podaj swoj wiek: "; std::cin >> wiek; bool polska = wiek == 16 || wiek == 17; if( wiek >= 18 ) std::cout << "Zgodnosc wieku: TAK" << std::endl; else std::cout << "Zgodnosc wieku: BRAK" << std::endl; if( polska ) std::cout << "Kraj pochodzenia: POLSKA" << std::endl; else std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl; if( wiek == 17 ) std::cout << "Godnosc: Mateusz" << std::endl; else std::cout << "Godnosc: Brak danych"; std::cout << std::endl << std::endl << "Podaj swoj wiek: "; std::cin >> wiek; if( wiek >= 18 ) std::cout << "Zgodnosc wieku: TAK" << std::endl; else std::cout << "Zgodnosc wieku: BRAK" << std::endl; if( polska ) std::cout << "Kraj pochodzenia: POLSKA" << std::endl; else std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl; if( wiek == 17 ) std::cout << "Godnosc: Mateusz" << std::endl; else std::cout << "Godnosc: Brak danych"; std::cout << std::endl << std::endl << "Podaj swoj wiek: "; std::cin >> wiek; if( wiek >= 18 ) std::cout << "Zgodnosc wieku: TAK" << std::endl; else std::cout << "Zgodnosc wieku: BRAK" << std::endl; if( polska ) std::cout << "Kraj pochodzenia: POLSKA" << std::endl; else std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl; if( wiek == 17 ) std::cout << "Godnosc: Mateusz" << std::endl; else std::cout << "Godnosc: Brak danych"; return 0; }
i teraz nie wiem dlaczego jeżeli wpisze np. jako poerwsze wiek większy od 18 to po kolejnych wpisach choć zgodnych z komendami w programie tj. 16 i 17 lat, wyświetla mi nadal to samą odpowiedz co w przypadku lat 20. a z programu wynika ze powinno być inaczej. Prosze o pomoc, gdzie popełlniam błąd i jaki. I jeżeli to możliwe to pomoc niech będzie oparta na rozdziałach 12 i 13. pozdrawiam Mateusz |
|
jsc |
» 2013-01-28 13:04:46 Spróbuj powstawiać tam gdzie trzeba klamry, bo bez nich jest strasznych chaos. |
|
ligras |
» 2013-01-28 13:12:36 Hej, patrząc na Twój kod (wcięcia w tekście) jako pierwsze nasuwa mi się pytanie, czy nie zapomniałeś o nawiasach - pamiętaj, że jeśli po słówku "else" chcesz wykonać kilka instrukcji to musisz je wziąć w klamry. 2) uruchomiłam Twój kod tak jak pisałeś, 20 , 17, 16, odpowiedzi były: Witam Podaj swoj wiek: 20 Zgodnosc wieku: TAK Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia Godnosc: Brak danych
Podaj swoj wiek: 17 Zgodnosc wieku: BRAK Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia Godnosc: Mateusz
Podaj swoj wiek: 16 Zgodnosc wieku: BRAK Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia Godnosc: Brak danych
3) Może napisz co chciałbyś osiągnąć, bo wyniki programu dla mnie są zgodne z oczekiwaniami patrząc na kod. |
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-01-28 13:21:10 Witam Podaj swoj wiek: 20 Zgodnosc wieku: TAK Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia Godnosc: Brak danych
Podaj swoj wiek: 17 Zgodnosc wieku: BRAK Kraj pochodzenia: Kraj pochodzenia: POLSKA Godnosc: Mateusz
Podaj swoj wiek: 16 Zgodnosc wieku: BRAK Kraj pochodzenia: Kraj pochodzenia: POLSKA Godnosc: Brak danych Ja chciałem osiągnąć coś takiego. I powiem tak jeżeli wpiszemy taki program: #include <iostream> int main() { std::cout << "Witam" << std::endl; int wiek; std::cout << "Podaj swoj wiek: "; std::cin >> wiek; bool polska = wiek == 16 || wiek == 17; if( wiek >= 18 ) std::cout << "Zgodnosc wieku: TAK" << std::endl; else std::cout << "Zgodnosc wieku: BRAK" << std::endl; if( polska ) std::cout << "Kraj pochodzenia: POLSKA" << std::endl; else std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl; if( wiek == 17 ) std::cout << "Godnosc: Mateusz" << std::endl; else std::cout << "Godnosc: Brak danych"; return 0; } czyli pojedynczy kod, to wtedy przy kolejnym odpalaniu wszystko dzziała właściwie, tylko w przypadku powtarzania sekwencji coś działa nie tak. |
|
ligras |
» 2013-01-28 13:27:43 Jeśli chciałeś osiągnąć wyniki które podałeś, to moim zdaniem powinieneś jeszcze dwa razy (po każdej prośbie o wiek) dać instrukcję: polska = wiek == 16 || wiek == 17;
|
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-01-28 13:33:06 Czyli nie wystarczy dać zminnej 'bool' a poźniej ją wpisywać do komend 'if'?
|
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-01-28 13:35:59 i jeżeli chodzi o te klamry to szczerze powiedziawszy nie mam pojęcia gdzie je umieścić żeby byly właściwie czytane bo w lekcji 13 jest bardzo ogólnie na ten temat i jak próbuje te klamry umieszczać to błędy mi wyskakują. jeżeli mógłbym uzyskać przykład na podstawie mojego kodu to byłbym wdzięczny. |
|
ligras |
» 2013-01-28 13:43:26 Zależy co chcesz osiągnąć. Jeśli pozostawisz kod tak jak było na początku, to mówisz: utwórz mi zmienną boolowska o nazwie "polska" w której to zapisz wynik porównania logicznego (wiek == 16 || wiek == 17). "Wiek" podałeś wcześniej, więc Twoja zmienna "polska" w tym momencie przyjmuje konkretną wartość. Na przykład jeśli podałeś wiek = 16, to masz takie przypisanie: bool polska = 16 == 16 || 16 == 17; // wynik: polska = 1; Jesli podasz wiek = 20, to masz: bool polska = 20 == 16 || 20 == 17; // wynik: polska = 0; No i koniec, nigdzie więcej zmiennej polska już nie zmieniasz. Ale w różnych miejscach się o nią pytasz. Instrukcja pytająca if ( polska ) { ... } nie zmienia wartości zmiennej polska. To jest skrót od zapytania: if ( polska == true ) { ... } Jeśli chciałbyś zmienić wartość zmiennej polska, to powinno to wyglądać: if ( polska = (wiek == 16 || wiek == 17) ) { ... } Ale takich rzeczy radze na początku nie używać, bo łatwo się pogubić. |
|
« 1 » 2 |