[Lekcja 15] cin.sync() vs cin.ignore(numeric_limits <streamsize>::max(), '\n')
Ostatnio zmodyfikowano 2013-08-15 00:43
Arnimarl Temat założony przez niniejszego użytkownika |
[Lekcja 15] cin.sync() vs cin.ignore(numeric_limits <streamsize>::max(), '\n') » 2013-08-14 20:36:55 Niezwykly blad.. nie umiem zlokalizowac przyczyny. #include <iostream> using namespace std;
int main() { int liczba; do { cout << "Podaj liczbe:" << endl; cin.clear(); cin.ignore( 1000, '\n' ); cin >> liczba; } while( cin.good() == 0 ); cout << "Koniec" << endl; return 0; }
Oto moj kod. Tak jak juz wspomnialem, posiadam Linuxa:Xubuntu. Po skompilowaniu i uruchomieniu powyzszego kodu dostaje niezwykly wynik: Program prosi o podanie liczby... 2 razy. Niewazne, co wprowadzimy. Oto skopiowane zachowanie programu po uruchomieniu(uruchomilem 2 razy, zeby czytajacy lepiej zobaczyl dzialanie): UWAGA! Dla osob chcacych pomoc w kwestii kodu, a nie majacych do czynienia z poleceniami terminala, uprzejmie informuje, ze "arnimarl@ubuntu:~/kodowanie$ ./cpp" to po prostu klucz, ktory uruchamia program- jak ponizej widac. arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: test1 LOL?? dlaczego drugi raz? Podaj liczbe: jnxjxxnx Podaj liczbe: 1000 Koniec arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: 1 1 Koniec arnimarl@ubuntu:~/kodowanie$ Jestem zrozpaczony. Siedze nad tym 5 godzin. Tylu rzeczy bym sie nauczyl, ale glowie sie nad czyms, czego w zaden sposob zrozumiec nie umiem. Moze jestem zmeczony, moze po prostu niezbyt bystry. W kazdym razie bardzo prosze o pomoc. |
|
Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 21:02:37 Adminiastrator przeczytal, ale nie odpowiedzial;( ... przeciez musi byc jakies rozwiazanie tego problemu... |
|
pekfos |
» 2013-08-14 21:04:13 |
|
Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 21:09:45 Zmienilem, efekt- bez zmian: arnimarl@ubuntu:~/kodowanie$ gedit arnimarl@ubuntu:~/kodowanie$ make cpp g++ cpp.cpp -o cpp arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: 1 1 Koniec arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: m m Podaj liczbe: m Podaj liczbe: 1 Koniec |
|
jankowalski25 |
» 2013-08-14 21:19:21 Czyścisz strumień przed wprowadzeniem danych? Zrób to po ich odczytaniu! |
|
Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 21:25:19 Zrobilem to juz wczesniej, na Pana prosbe zrobilem i teraz, zeby sie upewnic i efekt jest taki, ze program konczy sie po pierwszym wprowadzeniu danych do strumienia, niewazne czy te dane beda poprawne, czy nie. W terminalu po uruchomieniu ma sie to nastepujaco: arnimarl@ubuntu:~/kodowanie$ gedit arnimarl@ubuntu:~/kodowanie$ make cpp g++ cpp.cpp -o cpp arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: 1 Koniec arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: m Koniec arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: m Koniec arnimarl@ubuntu:~/kodowanie$ ./cpp Podaj liczbe: adds Koniec arnimarl@ubuntu:~/kodowanie$
|
|
pekfos |
» 2013-08-14 21:31:56 Sprawdź to: cin.clear(); cin.ignore( 1000, '\n' ); cerr << "---\n";
cin >> liczba; |
|
jankowalski25 |
» 2013-08-14 21:34:24 1. Wczytujesz dane. 2. Sprawdzasz poprawność (i zapisujesz to do zmiennej typu bool ). 3. Czyścisz strumień. 4. Przy pętli sprawdzasz wartość zmiennej. |
|
« 1 » 2 3 |