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

question-closed c++ nieskończona pętla problem.

Object Storage Arubacloud
0 głosów
1,160 wizyt
pytanie zadane 17 października 2017 w C i C++ przez asd2769 Nowicjusz (160 p.)
zamknięte 18 października 2017 przez asd2769

Witam :) piszę prosty kalkulator do pól figur. Mój problem wygląda następująco...
W przedstawionym niżej programie niepoprawnie działa kontrola wejścia.
W momencie podania błędnych danych (znaku niebędącego int'em) program, zamiast wykonać się od początku zamyka się w pętli i zaczyna w nieskończoność wypisywać błędne dane lub/i Pole prostokąta wynosi:0.

Z góry dziękuje za wszelką pomoc.

#include <iostream>
#include <conio.h>
#include <cstdlib>

void trapez()
    {
           for (;;)
    {
int h, a, b, x, i;
            std::cout << "Podaj wysoko\230\206 prostok\245ta:";
                if (!(std::cin >> h))                                   //liczba h
                    {
                            system ( "cls");
                        std::cerr << "B\210\251dne dane";
                            getch();
                            system ( "cls");
                            void trapez();
                    }

            std::cout << "Podaj d\210ugo\230\206 a:";
                 if (!(std::cin >> a))                                 //liczba a
                    {
                            system ( "cls");
                        std::cerr << "B\210\251dne dane";
                            getch();
                            system ( "cls");
                            void trapez();
                    }

            std::cout << "Podaj d\210ugo\230\206 b:";
                 if (!(std::cin >> b))                               //liczba b
                    {
                            system ( "cls");
                        std::cerr << "B\210\251dne dane";
                            getch();
                            system ( "cls");
                            void trapez();
                    }

                    x=((a+b)*h)/2;

            std::cout << "Pole prostok\245ta wynosi:" << x << std::endl;
                    getch();
                    system ( "cls" );
            std::cout << "Ostatnie dzia\210anie: ";
            std::cout << "a-" << a;
            std::cout << "; b-" << b;
            std::cout << "; h-" << h;
            std::cout << " da\210o nam wynik:" << x << std::endl;
    }
    }
int main()
{
        trapez();

    return 0;
}
komentarz zamknięcia: Rozwiązano problem
1
komentarz 18 października 2017 przez niezalogowany
Weź popraw te wciecia, bo się nie da czytać :(
komentarz 18 października 2017 przez DragonCoder Nałogowiec (36,500 p.)
Skoro stworzyles juz funkcje, to probuj zrobic petle przy pomocy owej funkcji, zamiast uzywac for (;;) czy while (true). Przy kontroli bledow, czyli, jezeli strunien wejscia nie jest typem integer, tylko char wroc do poczatku funkcji.
komentarz 18 października 2017 przez DragonCoder Nałogowiec (36,500 p.)
@shead zgadzam sie, nie wiem jak na komputerze, ale na telefonie to masakra

3 odpowiedzi

+1 głos
odpowiedź 18 października 2017 przez j23 Mędrzec (194,920 p.)

Po tym, jak strumień wejdzie w stan błędu, powinieneś wyzerować jego flagi metodą clear(), później metodą ignore() usunąć ze strumienia błędne dane.

+1 głos
odpowiedź 18 października 2017 przez Huberti Gaduła (4,500 p.)

Po każdym nieudanym odczycie użyj kodu:

std::cin.clear();//czyści flagi błędu
std::cin.sync();//czyści bufor strumienia

Przeczytaj: 

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12

 

0 głosów
odpowiedź 18 października 2017 przez asd2769 Nowicjusz (160 p.)
Wszystko jasne :)

Dziękuje za pomoc.

Podobne pytania

0 głosów
3 odpowiedzi 867 wizyt
0 głosów
0 odpowiedzi 453 wizyt
0 głosów
2 odpowiedzi 2,063 wizyt
pytanie zadane 12 października 2019 w C i C++ przez Niepokonana7999 Bywalec (2,270 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...