Problem z Pracą domową w Dziale Pętla do...while.
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Problem z Pracą domową w Dziale Pętla do...while.

AutorWiadomość
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:
C/C++
#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)



P-98213
» 2013-12-03 21:11:16
Po co wypisujesz std::cout na std::cout?
P-98216
» 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ś.
P-98221
» 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.
P-98228
Temat założony przez niniejszego użytkownika
» 2013-12-04 19:20:15
I tutaj kolejny problem.

C/C++
#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ć.
P-98337
» 2013-12-04 19:47:20
Warunek dalej jest bez sensu i dalej wyświetlasz std::cout.
P-98343
» 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.
P-98348
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.
P-98676
« 1 »
 Strona 1 z 1