trochę z flagami błędów w pracy strumienia i inne

0

Może ktoś będzie mi to umiał wyjaśnić. Bawię się na kompilatorze Dev C++ 4.9.8.0 i wykonując
poniższy program, w którym otwierany plik nic.txt nie istnieje funckja plik.bad() nie zwraca
żadnej wartości niezerowej :|

#include <iostream.h>
#include <fstream.h>

main()
{
ifstream plik ;
plik.open("nic.txt") ;
if (plik.bad()) { cout << "Blad!" << endl ; }
int y ;
cin >> y ;
}

Genralnie rzecz biorąc kompilator zachowuje mi się trochę tak jakby nie miał w słowie flag strumienia części 'bad'... Natomist przy zabawie z flagą failbit wyszło, ze wprawdzie jest ustawiana i czytana jak trzeba, ale jakoś nie udało mi się jej skasować operacją
plik.clear( plik.rdstate() & ~ios::failbit) ; :(

I jeszcze jedno - jaka mogłaby być pętla ignorująca wszystkie znaki tkwiące w strumieniu?
Myślałem, że np dla strumienia cin może to być zwyczajne while(cin.ignore()) ale taka operacja owszem, wprawdzie zjada to co w danej chwili tkwi w strumieniu, ale zamiast się potem wyłączyć czycha na wszystkie moje naciśnięcia klawiatoru, żeby je zaraz potem zjeść i dalej czychać... A jak na moje pot<ort>żeby</ort> to do bani z taką łakomą pętlą...

0

Jeśli chcesz aby ci wyskoczył bład to wpisz

ifstream plik;
plik.open("C:\test.txt");
if (!plik) return 0; //tutaj wyskakuje błąd (albo wyświetl że pojawia się błąd)
while (!plik.eof())
{
<<jakieś śmieszne operacje na pliku>>
}
plik.close
system("pause");

1 użytkowników online, w tym zalogowanych: 0, gości: 1