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

Rozdzial 9 Pytanie o kod

Ostatnio zmodyfikowano 2017-01-31 12:07
Autor Wiadomość
ofnero
Temat założony przez niniejszego użytkownika
Rozdzial 9 Pytanie o kod
» 2017-01-31 10:57:02
Witam, niedawno zacząłem naukę z językiem C++ i mam pytanie odnośnie zadania z rozdziału 9, który znajduje się tutaj: http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1​/Obsluga-strumienia-wejscioweg​o​/12. Chciałbym się dowiedzieć, czy informacja o poprawnym wczytaniu ma być z góry określona jak w poniższym kodzie czy komputer automatycznie ma to wykryć. Jeśli ma wykryć to proszę o poprawienie jak to ma wyglądać.Kod wygląda tak:
C/C++
#include <iostream>

using namespace std;
float a, b, c;
bool wczytano = cin.good();
bool niewczytano = cin.fail();

int main()
{
    cout << "Podaj 1 liczbe rzeczywista: "; cin >> a; cin.clear(); cin.sync();
    cout << "Podaj 2 liczbe rzeczywista: "; cin >> b; cin.clear(); cin.sync();
    cout << "Podaj 3 liczbe rzeczywista: "; cin >> c; cin.clear(); cin.sync();
   
    cout << "Liczba pierwsza to: " << a << ". Wczytano: " << wczytano << endl;
    cout << "Liczba druga to: " << b << ". Wczytano: " << niewczytano << endl;
    cout << "Liczba trzecia to: " << c << ". Wczytano: " << wczytano << endl;
   
    return 0;
}
P-157154
garlonicon
» 2017-01-31 11:17:59
Sprawdź, jakie otrzymasz wyniki po podaniu niepoprawnych danych (na przykład liter).
P-157155
ofnero
Temat założony przez niniejszego użytkownika
» 2017-01-31 11:42:56
Ale ten program napisałem żeby podał wynik taki jak w zadaniu domowym z kursu, czyli dla:
13.3
tak 123
33.22nie

Liczba pierwsza to: 13.3. Wczytano? 1.
Liczba druga to: 0. Wczytano? 0.
Liczba trzecia to: 33.22. Wczytano? 1.

Problem tkwi w tym, że u mnie z góry jest zaznaczone, że dla liczby drugiej zachodzi cin.fail(). Chciałbym się dowiedzieć jak zrobić, żeby to program decydował kiedy jest to prawda, a kiedy fałsz.
P-157157
karambaHZP
» 2017-01-31 11:44:46
C/C++
float a, b, c; // unikaj zmiennych globalnych, póki możesz
bool wczytano = cin.good(); // tutaj inicjalizujesz zmienne, których nie zmieniasz już do końca programu
bool niewczytano = cin.fail();

Problem tkwi w tym, że u mnie z góry jest zaznaczone, że dla liczby drugiej zachodzi cin.fail(). Chciałbym się dowiedzieć jak zrobić, żeby to program decydował kiedy jest to prawda, a kiedy fałsz.
Dla liczb deklarujesz trzy zmienne, a dla przechowania wartości logicznych masz jedną zmienną dla trzech liczb?
Zrób trzy zmienne
bool
 i przypisz do nich wartość zwróconą z metody
cin.good()
 lub
cin.fail()
,
ale dla każdej z nich dopiero po próbie wczytania operatorem
>>
 do zmiennej
float
.
P-157158
ofnero
Temat założony przez niniejszego użytkownika
» 2017-01-31 12:07:13
C/C++
#include <iostream>

using namespace std;

int main()
{
    cout << "Podaj 1 liczbe rzeczywista: ";
    float a;
    cin >> a;
    bool x = cin.good();
    cin.clear();
    cin.sync();
   
    cout << "Podaj 2 liczbe rzeczywista: ";
    float b;
    cin >> b;
    bool y = cin.good();
    cin.clear();
    cin.sync();
   
    cout << "Podaj 3 liczbe rzeczywista: ";
    float c;
    cin >> c;
    bool z = cin.good();
    cin.clear();
    cin.sync();
   
    cout << "Liczba pierwsza to: " << a << ". Wczytano: " << x << endl;
    cout << "Liczba druga to: " << b << ". Wczytano: " << y << endl;
    cout << "Liczba trzecia to: " << c << ". Wczytano: " << z << endl;
   
    return 0;
}
Czyli tak to powinno w skrócie wyglądać?:)
P-157160
« 1 »
  Strona 1 z 1