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

problem z cin.sync()

Ostatnio zmodyfikowano 2014-12-23 12:14
Autor Wiadomość
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;
}
P-123105
Mateus.
» 2014-12-19 14:14:56
Czyszczenie powinno być na początku pętli.
P-123108
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.
P-123109
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
P-123119
piteros
Temat założony przez niniejszego użytkownika
» 2014-12-23 10:55:19
nikt nic nie wie? :(
P-123263
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-wejscioweg​o​/12

zapisy: 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

P-123266
« 1 »
  Strona 1 z 1