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

[Lekcja 9] Problem z zadaniem - coś mi źle wychodzi :)

Ostatnio zmodyfikowano 2015-07-03 15:01
Autor Wiadomość
Deivid
Temat założony przez niniejszego użytkownika
[Lekcja 9] Problem z zadaniem - coś mi źle wychodzi :)
» 2015-07-02 14:00:43
Witajcie, postanowiłem rozpocząć naukę C++. Tak więc spotkacie jeszcze wiele "głupich" pytań z mojej strony. A oto pierwsze z nich: Co robię źle?
Poniżej wklejam link mojego programu: (bez czyszczenia bufora)
C/C++
#include <iostream>
using namespace std;;

int main()
{
    float a, b, c;
    bool sukces1, sukces2, sukces3;
    cout << "Podaj 3 liczby rzeczywiste: a, b, c:" << endl;
   
    cout << "Podaj a: ";
    cin >> a;
   
    cout << "Podaj b: ";
    cin >> b;
   
    cout << "Podaj c: ";
    cin >> c;
   
   
    sukces1 = cin.good();
    sukces2 = cin.good();
    sukces3 = cin.good();
    cout << "Liczba 'a' to: " << a << " Udalo sie wczytac? " << sukces1 << endl;
    cout << "Liczba 'b' to: " << b << " Udalo sie wczytac? " << sukces2 << endl;
    cout << "Liczba 'c' to: " << c << " Udalo sie wczytac? " << sukces3 << endl;
   
   
   
    return 0;
}

Wydaje mi się że po każdym
C/C++
cin >> a; //itd
powinno być:
cin.clear(); cin.sync();

I pytanie czy musze deklarować 3 zmienne bool i przypisywać im wartości cin.good() czy wystarczy tylko jedna?

Poproszę o sugestię :)
P-134254
darko202
» 2015-07-02 14:15:16
1. tak po każdym
   cin >> a; //itd
   powinno być:

   cin.clear(); 
   cin.sync();
ale wpływa na stan cin.good(); cin.fail()
i jeśli przed trzeba pamiętać stan to najpierw musisz wykonać cin.good();

2. przeczytaj jeszcze raz o odczytywaniu stanu strumienia po wczytaniu

 sukces1 = cin.good();
 sukces2 = cin.good();
 sukces3 = cin.good();
  
zastanów się czy stan strumienia mógł się zmienić ? 


P-134255
Deivid
Temat założony przez niniejszego użytkownika
» 2015-07-02 14:33:45
Wydaje mi się że przy zmiennej bool = sukces1 // itp kolejne zmienne sukces zapamiętają stan sukces1 i też trzeba to czyścić. Ale nie potrafię rozgryźć jak.
Czy muszę w tym poleceniu skorzystać z:
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
Czy też da się je rozwiązać inaczej ?
P-134256
Deivid
Temat założony przez niniejszego użytkownika
» 2015-07-02 14:54:04
OK, chyba sobie poradziłem. Kod programu wygląda tak:
C/C++
#include <iostream>
using namespace std;;

int main()
{ cin.clear(); cin.sync();
   
    // Wprowadzenie zmiennych dla liczb zmiennoprzecikowych, oraz bool odpowiadającej za wartość 0 lub 1
    float a, b, c;
    bool sukces1, sukces2, sukces3;
    cout << "Podaj 3 liczby rzeczywiste: a, b, c:" << endl;
   
    cout << "Podaj a: ";
    cin >> a;
    sukces1 = cin.good();
    cin.clear(); cin.sync();
    // Liczba zmiennoprzecinkowa 'a' oraz sprawdzenie poprawności danych po czym wyzerowanie bufora wejścia a.
    // Czynnosc powtorzona dla zmiennych 'b' i 'c'
   
    cout << "Podaj b: ";
    cin >> b;
    sukces2 = cin.good();
    cin.clear(); cin.sync();
   
    cout << "Podaj c: ";
    cin >> c;
    sukces3 = cin.good();
    cin.clear(); cin.sync();
   
    cout << "Liczba 'a' to: " << a << " Udalo sie wczytac? " << sukces1 << endl;
    cout << "Liczba 'b' to: " << b << " Udalo sie wczytac? " << sukces2 << endl;
    cout << "Liczba 'c' to: " << c << " Udalo sie wczytac? " << sukces3 << endl;
   
   
   
    return 0;
}

Dodałem też komentarz, proszę o sprawdzenie czy dobrze zrozumiałem zadanie i ewentualne poprawki.
PS. Czy da sie to samo zapisać w inny sposób (na moim poziomie ;) )
P-134258
pekfos
» 2015-07-02 16:05:22
Niepotrzebne cin.clear(); cin.sync(); na początku main().
P-134260
Deivid
Temat założony przez niniejszego użytkownika
» 2015-07-03 15:01:20
Dzięki, nie zauważyłem :)

Wpadłem na pomysł że program można napisać "ładniej" tak aby po wczytaniu sprawdzał daną liczbę dopiero później prosił o wprowadzenie następnej. :)

Temat chyba już wyczerpany i do zamknięcia.
P-134276
« 1 »
  Strona 1 z 1