Hajt.MoRuS Temat założony przez niniejszego użytkownika |
Maly problem. Zadanie 11.6 - 2 (powtarzajaca sie w nieskonczonosc petla) » 2010-04-18 20:57:20 Tak jak w temacie, mam problem z tym zadaniem. Kiedy chce zakonczyc program, wciskam litere 'z' badz 'Z' i wtedy petla powtarza sie w nieskonczonosc. Kiedy ta linijke } while( film != koniec[ 0 ] ); zmienie na ta } while( film == koniec[ 0 ] ); petla wykona sie tylko jeden raz. W czym tkwi problem? Prosze o podpowiedz ;d #include <iostream> #include <conio.h>
int main() { using namespace std; cout << "Kino Relax zaprasza!" << endl; cout << "Dzisiejsza oferta filmow to:" << endl; cout << "1. Transporter\t2. 2Fast 2Forious" << endl; cout << "3. Zohan\t4. Rocky" << endl; int bilety; int miejsca[ 4 ] = { 20, 20, 20, 20, }; int film; char koniec[ 2 ]; koniec[ 0 ] = 'z'; koniec[ 1 ] = 'Z'; koniec[ 2 ] = 'p'; do { cout << "Wybierz seans na ktory chcesz isc: "; cin >> film; if( film == 1 ) { cout << "Wybrales film Transporter." << endl; cout << "Liczba dostepnych miejsc: " << miejsca[ 0 ]; cout << "\nIle chcialbys kupic biletow? "; cin >> bilety; miejsca[ 0 ] -= bilety; if( miejsca[ 0 ] <= 0 ) { cout << "Nie ma tylu biletow lub miejsc" << endl; miejsca[ 0 ] += bilety; } } if( film == 2 ) { cout << "Wybrales film 2Fast 2Forious" << endl; cout << "Liczba dostepnych miejsc: " << miejsca[ 1 ]; cout << "\nIle chcialbys kupic biletow? "; cin >> bilety; miejsca[ 1 ] -= bilety; if( miejsca[ 1 ] <= 0 ) { cout << "Nie ma tylu biletow lub miejsc" << endl; miejsca[ 1 ] += bilety; } } if( film == 3 ) { cout << "Wybrales film Zohan" << endl; cout << "Liczba dostepnych miejsc: " << miejsca[ 2 ]; cout << "\nIle chcialbys kupic biletow? "; cin >> bilety; miejsca[ 2 ] -= bilety; if( miejsca[ 2 ] <= 0 ) { cout << "Nie ma tylu biletow lub miejsc" << endl; miejsca[ 2 ] += bilety; } } if( film == 4 ) { cout << "Wybrales film Rocky" << endl; cout << "Liczba dostepnych miejsc: " << miejsca[ 3 ]; cout << "\nIle chcialbys kupic biletow? "; cin >> bilety; miejsca[ 3 ] -= bilety; if( miejsca[ 3 ] <= 0 ) { cout << "Nie ma tylu biletow lub miejsc" << endl; miejsca[ 3 ] += bilety; } } } while( film != koniec[ 0 ] ); cout << "\nKoniec programu" << endl; getch(); return 0; }
|
|
jacek_k |
» 2010-04-18 21:12:49 Do zmiennej int wczytujesz znak, zatem w tym tkwi błąd (zmienna film powinna być typu char). Poza tym w jednym miejscu piszesz po pamięci char koniec[2]; koniec[0] = 'z'; koniec[1] = 'Z'; koniec[2] = 'p'; |
|
Hajt.MoRuS Temat założony przez niniejszego użytkownika |
» 2010-04-18 21:41:35 Do zmiennej film wczytuje cyfry, jezeli podmienie int na char to nie wybiore na ktory film chce pojsc ... i nie wiem o co ci chodzi z tym pisaniem po pamieci. |
|
madmike44 |
» 2010-04-19 07:36:09 Element koniec[0] to znak (konkretnie 'z'), a ty w warunku while(film == koniec[0]) dokonujesz porównania liczby całkowitej ze znakiem 'z', czyli z reprezentacją znaku 'z' w kodzie ASCII - a to jest akurat 122. Natomiast jeżeli z konsoli wczytasz do inta znak inny niż jakąś liczbę, to w tej zmiennej całkowitej będziesz miał jakąś wartość, która nie będzie wynosić 122, przy wpisaniu znaku 'z'. Taki warunek: (film == koniec[0]) jest błędny, ponieważ program będzie działał tylko, jeżeli do zmiennej wpiszemy wartość 122. A chodzi nam o coś zupełnie odwrotnego. Jeżeli chcesz, to możesz to zrobić na znakach - bo cyfry 0-9 można traktować jak znaki. Zmiany, jakie musisz wprowadzić, to: Zamiana int film; na char film; Zamiana warunków if( film == 1 ) na if( film == '1' ) Zamiana warunku while( film != koniec[ 0 ] ) na while( film != 'z' && film != 'Z' ) Możesz też oczywiście potraktować to tak, że zostawić wszystko tak, jak jest, a sprawdzać jedynie, czy liczba wpisana do zmiennej "film" jest z przedziału 1-4. Wtedy każda inna wartość będzie traktowana jak chęć wyjścia z programu. |
|
GoldWolf |
» 2010-04-19 08:36:23 madmike44 To nie zadziała! Strumień czeka na liczbę a dostaje literę i ustawia flagę błędu! W tym wypadku najlepiej posłużyć się cyframi. Czyli np.5 to koniec. Nie musisz używać tej tablicy, którą i tak źle zadeklarowałeś!
Radzę się też zapoznać dokładnie z 7.3. Kłopoty przy wprowadzaniu tekstu, aż do końca kursu! |
|
madmike44 |
» 2010-04-19 09:31:38 Fakt - nie można tak wpisać znaku do inta. Tego nie sprawdziłem. Ale mając zmienną "film" typu znakowego spokojnie może zrobić to co chce - czyli zamknięcie programu po wprowadzeniu litery "z".
Pomijając już takie rzeczy, że do dwuelementowej tablicy Hajt.MoRuS chce wpisać 3 elementy :) |
|
Hajt.MoRuS Temat założony przez niniejszego użytkownika |
» 2010-04-19 17:02:39 Ok dzieki chlopaki udalo mi sie zrobic to zadanko ;d Pewnie bede mial problem z kolejnym, ale poczekamy zobaczymy ;d Problem rozwiazany - zamykam temat. |
|
« 1 » |