Poprawne zagnieżdżenie if w ifie
Ostatnio zmodyfikowano 2017-05-16 23:15
latajacaryba |
» 2017-05-14 23:30:53 Od tego jest to forum :DD Najpierw sprawdź, czy to na pewno jest liczba: if( cin.good() == false ) { cout << "to nie liczba! sprobuj ponownie:\n"; std::cin.clear(); std::cin.sync(); continue; }
else if( a > 200 || a < 50 ) { cout << "podales zla liczbe!, wpisz ja jeszcze raz! \n"; continue; }
przejdźmy do: while( cin.good() && 50 < a && a < 200 ); wyrzuć cin.good (bo w naszym else if mamy już obsługę tego przypadku, jak pamiętasz wygląda ona nastepująco: jeśli cin.good() == flase, to: - czyścimy bufor i flage (na razie nie musisz wiedzieć co to, po prostu mają być tam te 2 instrukcje) - wracamy dzięki continue na początek pętli ) wyrzuć też 50 < a && a < 200, bo mamy obsługę tej sytuacji (nasz else if) i zrób pętle nieskończoną: while(1){...} Działanie continue: https://zapodaj.net/df7b78b7861ec.png.html |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2017-05-15 18:25:04 Ewidentnie zbliżamy się do zakończenia problemu. Wygląda na chwilę obecną to tak: #include <iostream> int main() { int a; int b; using namespace std; cout << "Po wprowadzeniu dlugosci bokow prostokatu program obliczy i poda jego pole oraz obwod." << endl; cout << "Podaj dlugosc boku A. Musi sie ona miescic w przedziale od 50 do 200 jednostek." << endl; do { cin >> a; if( cin.good() == false ) { cout << "to nie liczba! sprobuj ponownie! \n"; std::cin.clear(); std::cin.sync(); continue; } else if( a > 200 || a < 50 ) { cout << "podales zla liczbe!, wpisz ja jeszcze raz! \n"; continue; } else { cout << "Wczytano liczbe A \n"; continue; } } while( 1 ); return 0; }
Ale nie rozumiem jednej rzeczy. Jaki sens ma tutaj ta pętla jesli nie pozwala ona przejść programowi dalej (w obecnym stadium rozwoju zamknąć się)? |
|
karambaHZP |
» 2017-05-15 18:31:43 |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2017-05-15 18:39:45 Wielkie dzięki wszystkim za pomoc! Problem rozwiązany, program działa. Zamykam temat |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2017-05-16 21:27:26 Uznałem, że skopiowanie kodu z wpisywania zmiennej a i zamienienie paru literek nada się jako kod do wprowadzenia zmiennej b się nada. Na szczęście dogłębniej sprawdziłem działanie programu i jednak nie działa. Program przy wprowadzaniu zmiennej b pozwala na wprowadzenie dowolnej liczby a ma przecież podane ograniczenia. #include <iostream> using namespace std; int main() { int a; int b; cout << "Po wprowadzeniu dlugosci bokow prostokatu program obliczy i poda jego pole oraz obwod. \nDlugosci bokow musza miescic sie w przedziale od 50 do 200 jednostek." << endl; cout << "\nPodaj dlugosc boku A." << endl; do { cin >> a; if( cin.good() == false ) { cout << "to nie liczba! sprobuj ponownie!" << endl; std::cin.clear(); std::cin.sync(); continue; } else if( a > 200 || a < 50 ) { cout << "podales zla liczbe!, wpisz ja jeszcze raz!" << endl; continue; } else { cout << "Wczytano liczbe A" << endl; break; } } while( 1 ); cout << "\nPodaj dlugosc boku B." << endl; do { cin >> b; if( cin.good() == false ) { cout << "to nie liczba! sprobuj ponownie!" << endl; std::cin.clear(); std::cin.sync(); continue; } else if( a > 200 || a < 50 ) { cout << "podales zla liczbe!, wpisz ja jeszcze raz!" << endl; continue; } else { cout << "Wczytano liczbe B" << endl; break; } } while( 1 ); cout << "\n\nPole tego prostokata wynosi:" << a * b << endl; cout << "\nObwod tego prostokata wynosi:" << a + a + b + b << endl; return 0; }
|
|
Chowan |
» 2017-05-16 23:15:26 Bo masz przy wprowadzaniu b nie zmienione litery w else if. Pozostało skopiowane a. |
|
1 « 2 » |