Nieprawidłowe działanie pętli do..while
Ostatnio zmodyfikowano 2013-02-11 07:44
Nitr0Skay |
» 2013-02-10 13:45:08 @Uśmiech Nie lepiej użyć biblioteki #include <conio.h> i zamiast system( "pause" ); użyć getchar(); ażeby nie było żadnych warningów ?? Jeżeli nie, to dlaczego ?? |
|
usmiech |
» 2013-02-10 14:23:49 Pewnie to zalezy od kompilatora, ktorego uzywasz. Ja uzywam Visual Studio i system("pause") wstrzymuje debugowanie nie pokazujac zadnych warningow.. Mozna tez zamiast tego napisac w tym miejscu dwukrotnie cin.get(). Nie ma potrzeby dla tych instr uzywac biblioteki conio.h. Efekt ten sam i nie powinienes juz widziec warningow, pozdrawiam :) |
|
Monika90 |
» 2013-02-10 17:41:16 Gdyby metoda sync byłaby bezużyteczna to by nie istniała w standardzie. |
Gdyby standard był idealny i nie zawierał błędów, to by nie istniał w rzeczywistości. Standard nie wymaga od std::cin.sync() żadnego konkretnego zachowania, więc implementacja może zrobić co zechce. http://en.cppreference.com/w/cpp/io/basic_istream/sync- std::cin.good() może zwrócić false nawet gdy wczytanie liczby się powiodło, dlatego lepiej używać std::cin.fail() | Masz jakiś przykład? :) |
Wyobraź sobie, że wczytujesz liczbę, która jest na samym końcu pliku, a po niej nie ma już nic, nawet białych znaków. W takiej sytuacji po wczytaniu tej liczby good() == false pownieważ eof() == true, ale fail() == false, bo wczytanie się powiodło. |
|
krzyk |
» 2013-02-11 07:44:07 std::cin.good() może zwrócić false nawet gdy wczytanie liczby się powiodło, dlatego lepiej używać std::cin.fail() |
Wielu programistów żle interpretuje metodę good() ,niesłuży ona do sprawdzenia czy operacja na strumieniu się powiodła tylko czy strumień jest gotowy do następnej operacji.
Cytat z manuala:
Check if the state of the stream is good for i/o operations. |
|
|
1 « 2 » |