Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 9] Problem z bool'em.

Ostatnio zmodyfikowano 2013-09-14 20:28
Autor Wiadomość
Dziobas
Temat założony przez niniejszego użytkownika
[Lekcja 9] Problem z bool'em.
» 2013-09-14 02:47:48
Witam!
Jestem początkujący także z góry przepraszam ze kod jest w normalnym tekście ale szukałem i szukałem...  i dalej nie wiem jak zrobić z tego specjalną ramkę jako "kod".
Problem jest taki że na końcu po "Wczytano" wszędzie pokazuje mi wartość "1" ;) mimo że w tym środkowym jak się wpisuje "tak 123" to wtedy "y" wyświetla jako wartość "0" ale "spr" przy tym ma dalej wartość "1". I moje pytanie brzmi... czy do każdej zmiennej muszę tworzyć osobną zmienna bool'a czy moze być ta jedna "spr" tylko ja coś źle tutaj wpisałem ? Prosiłbym o pomoc ;) w tematach Lekcji 9 zadania nie znalazłem podobnego problemu albo słabo szukałem. Z góry dziękuje ;)

C/C++
#include <iostream>
int main()
{
   
    float liczba;
    float y;
    float b;
    bool spr = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cin >> liczba;
    spr;
    std::cin.clear();
    std::cin.sync();
    std::cin >> y;
    spr;
    std::cin.clear();
    std::cin.sync();
    std::cin >> b;
    spr;
    std::cout << "Liczba pierwsza to : = " << liczba << " Wczytano?: " << spr << std::endl;
    std::cout << "Liczba druga to : = " << y << " Wczytano?: " << spr << std::endl;
    std::cout << "Liczba trzecia to : = " << b << " Wczytano?: " << spr << std::endl;
    return 0;
}
P-92087
rafixxx25
» 2013-09-14 10:08:30
Nie możesz zrobić tego w ten sposób.
Po pierwsze: gdybyś zapisywał trzy razy do tej samej zmiennej to za każdym razem zmienna się nadpisze i wypisując jej wartość na końcu miałbyś tylko wartość ostatniego zapisu.
Po drugie: używasz std::cin.good(); tylko raz i to w dodatku przed wczytaniem jakiejkolwiek liczby. Przeczytaj sobie jeszcze raz tą lekcję, żeby zrozumieć zasadę działania tej funkcji.
Pisząc:
C/C++
spr;
nie robisz nic, co miałoby jakikolwiek wpływ na program. Nie przypisujesz do tej zmiennej żadnej wartości itd.
Musisz użyć 3 różnych zmiennych bool, aby wypisać wszystkie napisy na końcu.
P-92089
Dziobas
Temat założony przez niniejszego użytkownika
» 2013-09-14 12:35:31
No dzięki wielkie ;) już jak się kładłem spać to obczaiłem w głowie że to tak ma być ;) ale dzięki Tobie zrozumiałem chociaż że samo "bool spr = std::cin.good();" działa tylko w tym miejscu ;) myślałem po prostu że jak stworzyłem sobie zmienną o tej wartości, to potem mogę sobie tego używać do każdego po kolei ;). Chociaż to nadpisanie danych mógłbyś mi bardziej szczegółowo wytłumaczyć? Z góry dzięki ;)

Tak mi działa poprawnie:

C/C++
#include <iostream>
int main()
{
   
    float liczba;
    float y;
    float b;
    bool spr;
    bool spr2;
    bool spr3;
    std::cin.clear();
    std::cin.sync();
    std::cin >> liczba;
    spr = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cin >> y;
    spr2 = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cin >> b;
    spr3 = std::cin.good();
   
    std::cout << "Liczba pierwsza to : = " << liczba << " Wczytano?: " << spr << std::endl;
    std::cout << "Liczba druga to : = " << y << " Wczytano?: " << spr2 << std::endl;
    std::cout << "Liczba trzecia to : = " << b << " Wczytano?: " << spr3 << std::endl;
    return 0;
}

PS. Jak się robi tą ramke "C/C++" ? ^^
P-92094
rafixxx25
» 2013-09-14 12:48:33

[cpp]
[/cpp]
"Chociaż to nadpisanie danych mógłbyś mi bardziej szczegółowo wytłumaczyć? "
Wygląda na to, że niezbyt dobrze rozumiesz jeszcze pojęcie zmiennych ;)
bool spr;
to zmienna typu bool - przyjmuje wartość true lub false.
std::cin.good();
to funkcja, która zwraca wartość typu bool.
spr = std::cin.good();
Powyższy zapis przypisuje do naszej zmiennej typu bool(spr) wartość typu bool zwróconą przez funkcję std::cin.good(); To tak jakbyś napisał:
C/C++
spr = true;
albo
spr = false;
tylko działa w konkretnych przypadkach(jeśli zapisanie ze strumienia powiodło się - true, jeśli nie - false.
Wywołując tą samą funkcję kilka razy dla tej samej zmiennej będziesz nadpisywał jej wartość, tak, że przyjmie ona tą wartość, któą będzie na samym końcu.
P-92095
Dziobas
Temat założony przez niniejszego użytkownika
» 2013-09-14 20:28:30
No teraz chyba dobrze zrozumiałem ;) innej opcji nie ma, dzięki wielkie za pomoc ;)
Bless ;)
P-92123
« 1 »
  Strona 1 z 1