problem z cin.sync()
Ostatnio zmodyfikowano 2014-12-23 12:14
piteros Temat założony przez niniejszego użytkownika |
problem z cin.sync() » 2014-12-19 13:52:50 Witam serdecznie.
Próbuję zrobić zadania domowe z Waszych kursów. Męczy mnie jedno z nich odnośnie strumienia wyjściowego. W sensie programik napisałem jako taki ale chodzi o to że bufor niestety nie chce się czyścić. Po kompilacji wiadomo najpierw podać liczbę itd. Niestety jeśli sprawdzam czy wyświetli 0 przy błędnie wpisanych dancych to zczytuje mi poprzednią wartość zmiennej a, tzn tą podaną wcześniej. Próbowałem zmieniać lokację cin.clear i cin.sync no ale nie dało to efektów =/ proszę o pomoc bo chcialbym rzetelnie te zadanka zrobić.
#include "stdafx.h" #include <iostream> #include <cstdlib>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { float a; int licznik = 0; do{
cout << "Podaj l. rzeczywista: "; cin >> a;
cin.clear(); cin.sync();
bool prawdziwosc_wyrazenia = cin.good();
cout << "liczba a= " << a << " i " << prawdziwosc_wyrazenia << endl;
licznik++; }while ( licznik != 3);
system("pause"); return 0; }
|
|
Mateus. |
» 2014-12-19 14:14:56 Czyszczenie powinno być na początku pętli. |
|
wilkoo13 |
» 2014-12-19 14:15:40 Jak to poprzednią wartość zmiennej. Twój program pokazuje wartość zmiennej a oraz 1, za każdym razem inną wartość a która podasz oraz za każdym razem 1. Ponieważ cin.good() jest zawsze jeden, jeśli wprowadzisz źle jest 0. Jeśli czyścisz clearem i syncem to wraca do standardowej wielkości czyli 1. Jak czyścisz błędny zapisz to się nie dziw że zawsze pokazuje 1 że jest dobry. |
|
piteros Temat założony przez niniejszego użytkownika |
» 2014-12-19 14:58:46 nie chodzi o wielkość jeden. wiadomo że good to 1. chodzi o to że w przypadku gdy program prosi o podanie liczby wpisuję 5 na przykład. dalej jest następny krok i znowu prosi o podanie. wczytuję błędne dane np. litere t i program wyświetla. podałeś 5 i 0 czyli w tym wypadku 0 jako nieprawdziwość cin.good. chodzi mi o to aby nie podawał tej "5" tylko zwrócił wyczyszczoną synciem wartość powiedzmy -3875927922e20. zaraz zedytuję ze screenem. Mateus wczytanie tego na początku funkcji do nic nie pomogło niestety =/ http://zapodaj.net/cec081a485dae.png.html>Bez tytułu1.png[/img] <<<------ link do strony bo nie pamięam jak wkleić na forum |
|
piteros Temat założony przez niniejszego użytkownika |
» 2014-12-23 10:55:19 nikt nic nie wie? :( |
|
darko202 |
» 2014-12-23 12:14:01 nie rozumiem za bardzo Twojego problemu, ale popatrz na http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12zapisy: std::cin.good() oraz std::cin.fail są metodami za pomocą których możemy odczytać stany strumienia. na http://www.cplusplus.com/reference/ios/ios/good/są opisane zwracane stany tej funkcji nie widzę w nich możliwości pojawienia się wartości powiedzmy -3875927922e20 podobnie z fail co do wyświetlanej wartości 5 to ponieważ wystąpił błąd podczas wczytania wartość przechowywana w zmiennej nie uległa zmianie, a taka była poprzednio jej wartość. test -> uruchamiam -> 7 7 i 1 podaję r 7 i 0 wydaje mi się, że wiele kompilatorów podstawia wartości domyślne dla użytych zmiennych np. 0 dlatego nawet niezainicjalizowana zmienna ma jakąś wartość problem wartości zmiennej powiedzmy -3875927922e20 pojawiłby się chyba po przekroczeniu zakresu, a w Twoim przypadku nie mamy z nim do czynienia jeśli nie jest to odpowiedz na Twoje pytanie to proszę o ponowne doprecyzowanie go |
|
« 1 » |