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

Poziom 1 Obsługa strumienia wejściowego, sprawdzenie zadania.

Ostatnio zmodyfikowano 2017-09-09 17:22
Autor Wiadomość
kAKASHKIN
Temat założony przez niniejszego użytkownika
Poziom 1 Obsługa strumienia wejściowego, sprawdzenie zadania.
» 2017-09-01 15:07:40
Witam, jestem nowy na forum jak zarowno nowy w swiecie programowania, mam do was wielka prosbe, zeby ktos chetny i ogarniety sprawdzil mi czy dobrze wykonalem zadanie domowe z tego rozdzialu. Dla leniwych, tresc zadania:

Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło.

A to moj kod:

#include <iostream>
using namespace std;
int main ()
{
float a,b,c;
cout << "L1:";
cin >> a;
cin.sync();
cout << "L2:";
cin >> b;
cin.sync();
cout << "L3:";
cin >> c ;
cin.sync();
cout << "L1:" << a << "\t"<< "wczytano " << cin.good () << endl << "L2:" << b << "\t" << "wczytano " << cin.good () << endl << "L3:" << c << "\t"<< "wczytano " << cin.good ()<< endl;
    return 0;
}

Prosze o pomoc przyszli programisci :D
P-164505
maly7
» 2017-09-01 16:34:51
Po każdym wczytaniu powinieneś zapisać gdzieś cin.good(), jeśli wypiszesz na końću 3 razy cin.good() to zawierać będą tę samą informację.
Przed wczytaniem powinieneś jeszcze czyścić flagi błędu wczytania (cin.clear)
P-164507
kAKASHKIN
Temat założony przez niniejszego użytkownika
» 2017-09-09 15:03:28
teraz ok?


#include <iostream>
using namespace std;
int main ()
{
float a,b,c;
cout << "L1:";
cin.clear ();
cin >> a;
cin.good();
cin.sync();
cout << "L2:";
cin.clear ();
cin >> b;
cin.good();
cin.sync();
cout << "L3:";
cin.clear ();
cin >> c ;
cin.good();
cin.sync();
cout << "L1:" << a << "\t"<< "wczytano " << cin.good () << endl << "L2:" << b << "\t" << "wczytano " << cin.good () << endl << "L3:" << c << "\t"<< "wczytano " << cin.good ()<< endl;
    return 0;
}
  
P-164744
zirike
» 2017-09-09 16:26:18
W zadaniu też chodziło o to, aby użyć zmiennej typu 'bool', a u Ciebie tego nie ma. Natomiast mamy ten sam problem, ponieważ, jeżeli wpiszemy wszystkie dane poprawnie to całość działa. Gorzej jeżeli zamiast liczby rzeczywistej podamy np jakąś literę. Wtedy program nam przerywa i nie pyta o kolejną. Natomaist w zadaniu domowym w przykładowym działaniu programu, jeżeli podamy złe dane powinno przechodzić dalej i zwracać zmienną 'bool' jako 0. Czy jest ktoś kto znałby rozwiązanie tego problemu ?

To mój kod:

#include <iostream>
using namespace std;

int main()
{
    float a, b, c;

    cout << "Podaj pierwsza liczbe rzeczywista: ";
    bool aCzySukces = cin.good();
    cin.clear();
    cin >> a;
    cin.sync();
    cout << "Pierwsza liczba to: " << a << " Wczytano ? " << aCzySukces << endl;

    cout << "Podaj druga liczbe rzeczywista: ";
    bool bCzySukces = cin.good();
    cin.clear();
    cin >> b;
    cin.sync();
    cout << "Druga liczba to: " << b << " Wczytano ? " << bCzySukces << endl;

    cout << "Podaj trzecia liczbe rzeczywista: ";
    bool cCzySukces = cin.good();
    cin.clear();
    cin >> c;
    cin.sync();
    cout << "Trzecia liczba to: " << c << " Wczytano ? " << cCzySukces << endl;

    return 0;

}
P-164745
maly7
» 2017-09-09 16:35:59
Na przyszłość wstawiajcie kod w znacznikach [ cpp ] ... [ /cpp ]. Łatwiej się go czyta.

kAKASHKIN, ty dalej nigdzie nie zapisywałeś stanu cin.good(), a samo wywołanie tej metody nic nie daje.

Co do błędów, po pierwsze metoda cin.good() powinna być używana dopiero po wczytaniu znaku (po cin >> a), bo skąd przed wczytaniem ma wiedzieć czy wczytano znak czy liczbę?
Po drugie najpierw musicie wyzerować flagi błędów (cin.clear()) a dopiero później wyczyścić bufor (cin.sync())

C/C++
#include <iostream>
using namespace std;

int main()
{
    float a, b, c;
   
    cout << "Podaj pierwsza liczbe rzeczywista: ";
    cin.clear();
    cin.sync();
    cin >> a;
    bool aCzySukces = cin.good();
    cout << "Pierwsza liczba to: " << a << " Wczytano ? " << aCzySukces << endl;
   
    cout << "Podaj druga liczbe rzeczywista: ";
    cin.clear();
    cin.sync();
    cin >> b;
    bool bCzySukces = cin.good();
    cout << "Druga liczba to: " << b << " Wczytano ? " << bCzySukces << endl;
   
    cout << "Podaj trzecia liczbe rzeczywista: ";
    cin.clear();
    cin.sync();
    cin >> c;
    bool cCzySukces = cin.good();
    cout << "Trzecia liczba to: " << c << " Wczytano ? " << cCzySukces << endl;
   
    return 0;
}
P-164746
zirike
» 2017-09-09 16:40:27
Wielkie dzięki! Nareszcie działa jak należy :)
P-164747
kAKASHKIN
Temat założony przez niniejszego użytkownika
» 2017-09-09 17:22:54
Rowniez wielkie dzieki moje niedopatrzenie :) Na przyszlosc musze zapomniec o jakiej kolwiek pomylce :)
P-164749
« 1 »
  Strona 1 z 1