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

Lekcja 12 Strumień wejścia

Ostatnio zmodyfikowano 2011-01-29 16:12
Autor Wiadomość
Caranti
Temat założony przez niniejszego użytkownika
Lekcja 12 Strumień wejścia
» 2011-01-29 14:08:30
Witam

Może zacznę od tego że proszę o wyrozumiałość dotycząca mojej prośby. Rozumiem że dla was problem
może być naprawdę banalny , ale moje przygoda z programowaniem dopiero się zaczęła.

Przeje do konkretów a mianowicie chodzi o zadanie z lekcji obsługa strumieniu wejścia :

"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. "

"Wskazówka : Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool"


Problem pojawia się przy zmiennej bool oraz sprawdzaniu wyniku (jego prawidłowości)

Oto mój kod

#include <iostream>
int main()
{
    float a;
    int b;
    float c ;

    bool d,e;
    d = false;
    e = true;


   //Czyszczenie zawartosci strumienia wejscia
    std::cin.clear();
    std::cin.sync();

    std::cin >> a;

    //Czyszczenie zawartosci strumienia wejscia
    std::cin.clear();
    std::cin.sync();

    std:: cin >> b;

    //Czyszczenie zawartosci strumienia wejscia
    std::cin.clear();
    std::cin.sync();

    std:: cin >> c;


    //Wyświetlanie wartosci zmiennych
    std::cout << "\n\nLiczba pierwsza to : " << a << "\tWczytano ? ";
    std::cout << d << std::cin.good () ;
    std::cout << e << std::cin.fail() ;



    std::cout << "\n\nLiczba druga to : = " << b << "\tWczytano ? " ;
    std::cout << d << std::cin.good() ;
    std::cout << e << std::cin.fail() ;

    std::cout << "\n\nLiczba trzecia to : " <<c << "\tWczytano ? ";
    std::cout << d << std::cin.good() ;
    std::cout << e << std::cin.fail() << std ::endl;

    return 0;
}



Wiem że mój sposób na sprawdzanie wyniku jest bezsensowny xD(i tak zawsze wypisze 0110)

hmm myślę że musi być jakieś odwołanie zmiennej bool aby sprawdzała wynik tylko nie wiem jak ;/ sprawdzałem wiele sposobów ale nie wychodziło proszę o jakieś wskazówki
  
P-27404
szyx_yankez
» 2011-01-29 14:35:33
Poprostu zapisujesz zwracaną wartość metody cin.good() do zmiennej 'bool'.
C/C++
bool wczytano = cin.good();
I sprawdzaj poprawność po każdym wczytaniu zmiennej a nie pod koniec programu.
P-27408
Caranti
Temat założony przez niniejszego użytkownika
» 2011-01-29 15:29:11
Ok dzięki działa :)

Ale chce zrobić tak samo jak pokazane jest w przykładzie :
http://cpp0x.pl/kursy/Kurs-C++/Podstawy/Obsluga-strumienia-wejsciowego/12

czyli aby w strumieniu wyjścia wypisywało mi czy są dobre dane

//Wyświetlanie wartosci zmiennych
    std::cout << "\n\nLiczba pierwsza to : " << a <<std::endl;   ( coś tu musi być )

No nic będę dalej próbował ;)

A tak wogóle to jest lekcja 9 ;pp
P-27415
szyx_yankez
» 2011-01-29 15:47:36
  std::cout << "\n\nLiczba pierwsza to : " << a <<std::endl;   ( coś tu musi być )
Tutaj musisz dodać napis 'wczytano' i stan dodatkowej zmiennej.
Czyli:
C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    bool a_stan, b_stan, c_stan;
   
   
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> a;
    a_stan = std::cin.good(); //sprawdzamy stan i zapisujemy do zmiennej
   
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> b;
    b_stan = std::cin.good();
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> c;
    c_stan = std::cin.good();
   
   
    std::cout << "\n\nLiczba pierwsza to : " << a << "\tWczytano ? " << a_stan; //to tu musi byc
    std::cout << "\n\nLiczba druga    to : " << b << "\tWczytano ? " << b_stan;
    std::cout << "\n\nLiczba trzecia  to : " << c << "\tWczytano ? " << c_stan;
   
   
    return 0;
}
P-27416
Caranti
Temat założony przez niniejszego użytkownika
» 2011-01-29 16:12:28
Działa!!!!!!!!!!!!!!!! :D:D

Dzięki mistrzu :):)

Przeanalizuje sobie teraz na spokojnie ;)  i czas na kolejny temat :)
P-27418
« 1 »
  Strona 1 z 1