blondkarol Temat założony przez niniejszego użytkownika |
Problem z Pracą domową w Dziale Pętla do...while. » 2013-12-03 21:08:13 Nie wiem jak dokładnie napisać program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Sam log kompilacji nie wykazał, żadnych błędów. Kod: #include <iostream> int main() { bool bcala; do { std::cout << "Podaj liczba, zby zakonczyc." << std::endl; std::cin >> bcala; std::cout << bcala << " Nie jest liczba!" << std::cout; } while( bcala = std::cin.good() ); std::cout << "Liczba, ktora podales to" << bcala << std::endl; return 0; }
Efekt po wpisaniu liczby: Podaj liczba, zby zakonczyc. 1 1 Nie jest liczba !0x4433c4Podaj calkowita liczba, zby zakonczyc.
(Robi pętlę) Po wpisaniu litery a: 0 nie jest liczba calkowita
(Nie robi pętli) |
|
pekfos |
» 2013-12-03 21:11:16 Po co wypisujesz std::cout na std::cout? |
|
leon_w |
» 2013-12-03 21:16:08 w "while" masz przypisanie (=), a chyba powinno być porównanie (==) edit. a dokładniej to chyba powinno być różne (!=) I po wprowadzeniu cyfry( czy też znaku), czyść bufor i flagi błędów. bcala jest typu "bool" więc nie pokaże ci jaką liczbę faktycznie wpisałeś. |
|
pekfos |
» 2013-12-03 21:51:05 w "while" masz przypisanie (=), a chyba powinno być porównanie (==) |
Yy, nie. Tylko przypisanie (i zmienna bool) nie jest tam potrzebne. No i warunek powinien być przeciwny. |
|
blondkarol Temat założony przez niniejszego użytkownika |
» 2013-12-04 19:20:15 I tutaj kolejny problem. #include <iostream> int main() { int bcala; do { std::cout << "Podaj calkowita liczba, zby zakonczyc." << std::endl; std::cin >> bcala; std::cin.clear(); std::cin.sync(); std::cout << bcala << " Nie jest liczba calkowita!" << std::cout; } while( bcala != std::cin.good() ); std::cout << "Liczba, ktora podales to" << bcala << std::endl; return 0; }
Przy wpisaniu litery wyświetla: Podaj calkowita liczba, zby zakonczyc. a 0 Nie jest liczba calkowita!0x477864Podaj calkowita liczba, zby zakonczyc.
A przy wpisaniu liczby: 1 Nie jest liczba calkowita!0x477864Liczba, ktora podales to1
Process returned 0 (0x0) execution time : 63.690 s Press any key to continue.
Przepraszam, że tak głowę zawracam, ale naprawdę nie mogę tego zrozumieć. |
|
pekfos |
» 2013-12-04 19:47:20 Warunek dalej jest bez sensu i dalej wyświetlasz std::cout. |
|
leon_w |
» 2013-12-04 20:10:48 Dodaj na początku dodatkową zmienną "bool". Zaraz po wpisaniu znaku, przypisz do niej wartość sprawdzenia poprawności znaku (nie wiem jak to fachowo opisać ), czyli zmienna=std::cin.good(). Dlatego musisz to zrobić, ponieważ przy czyszczeniu flagi błędów, "zerujesz" też wartość std::cin.good(). W warunku while operuj już tą zmienną. Dodatkowo przed wypisaniem komunikatu, że to nie jest liczba, daj warunek "if", żeby wypisywało tylko wtedy, gdy faktycznie to nie jest liczba. |
|
blondkarol Temat założony przez niniejszego użytkownika |
» 2013-12-08 11:14:19 OK, dzięki. Teraz wszystko działa jak trzeba. Zamykam temat. |
|
« 1 » |