Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 21:43:03 W odpowiedzi na sugestie Pana pekfos- wycinek z terminala: 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: 2 --- mmm Podaj liczbe: --- 1 Koniec arnimarl@ubuntu:~/kodowanie$ |
|
pekfos |
» 2013-08-14 21:53:12 Tak myślałem.. ignore() blokuje program aż do napotkania znaku nowej linii, lub do odczytania 1000 znaków. Nie widzę prostego rozwiązania. Można utworzyć własny bufor strumienia, obsługujący sync(). |
|
Monika90 |
» 2013-08-14 22:09:44 int liczba; cout << "Podaj liczbe: "; while( !( cin >> liczba ) ) { cin.clear(); cin.ignore( 99999, '\n' ); cout << "To nie liczba, podaj liczbe: "; }
cout << "Podano " << liczba << endl;
|
|
MrPoxipol |
» 2013-08-14 22:47:15 [Lekcja 17] wczytaj liczbę Mój post (P-85901). int liczba = 0; bool czyOK = false;
do { cin >> liczba; czyOK = cin.good(); if( !czyOK ) { cout << "Wpisano błędną wartość!" << endl << "Podaj liczbe: "; cin.clear(); #ifdef _WIN32 cin.sync(); #else cin.ignore( numeric_limits < streamsize >::max(), '\n' ); #endif } } while( !czyOK );
|
|
Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 23:21:48 Dziekuje wszystkim za zaangazowanie. Na podstawie zebranych sugestii stworzylem ponizszy fragment kodu, ktory wreszcie dziala w prawidlowy sposob:#include <iostream> using namespace std;
int main() { int liczba; bool test; do { cout << "Podaj liczbe:" << endl; cin >> liczba; test = cin.fail(); cin.clear(); cin.ignore( 1000, '\n' ); } while( test ); cout << "Podana liczbe: " << liczba << endl; cout << "Koniec" << endl; return 0; }
Z jednej strony jestem zadowolony, gdyz ow wydawaloby sie blahy problem zostal wreszcie rozwiazany. Z drugiej strony jestem bardzo zasmucony, gdyz pisanie nawet tak podstawowych programow sprawia komplikacje. Nie wiem, czy jest to wina mojego Linuksa, zlozonosci tego jezyka.. luk wzgledem roznicy przystosowania do obslugii OS Windows/Linuks. Nie wiem, ale jest mi przykro i powiem szczerze, ze jestem troche zniechecony. Od pol roku jestem amatorsko zainteresowany programowaniem i spedzam wlasciwie kazdy wolny czas na praktyce tworzenia kodu. Jezyk w jakim cwiczylem sie do tej pory to glownie Python, a korzystalem przy tym z bardzo ciekawych zagranicznych projektow, takich jak: www.udacity.com czy www.codecademy.com. ktore bardzo polecam. Oczywiscie, zeby mnie ktos zle nie zrozumial, te strone rowniez uwazam za swietna i wspaniale zorganizowana. Jednak do czego zmierzam? Chcialem po prostu powiedziec, ze w porownaniu do jezyka Python, C++ znajduje jako bardzo ciezki i nieprzyjazny dla programistow, a przynajmniej tych poczatkujacych, za jakiego wciaz uwazam siebie. Zapewne jest to subiektywizm, jednak dzisiejszy problem przypomniel mi slowa kolegi, ktory odradzal mi proby nauki C++, a polecal doskonalenie sie w Python'ie, uzasadniajac to slowami: Moze i C++ jest potezny, moze szybki i dokladny, moze daje olbrzymie mozliwosci, ale to bez znaczenia, bo i tak bedziesz chodzil tam po nizinach. Jego rozbudowana skladnia sprawi, ze bedziesz godzinami pisal kod niskiego poziomu i niskiej wydajnosci. Czy nie lepiej chodzic po wyzynach? Dlatego radze, pozostan przy Python'ie.Niestety, te slowa dzis sie sprawdzily w moim przypdku. Wiem, ze nie wolno sie poddawac, ale nigdy nie spedzilem niemal calego dnia na probach rozwiazania jednego problemu. Na dzis dosc, bo jestem juz skolowacialy. Na koniec chcialem jeszcze raz podziekowac za pomoc i jedynie poprosic o wytlumacznenie jak w koncu(najbardziej profesjonalnie), nalezy czyscic strumien w wypadku uzytkownikow Linuksa- takich jak ja. |
|
MrPoxipol |
» 2013-08-14 23:26:30 Przecież masz napisane (patrz komentarze)... |
|
Arnimarl Temat założony przez niniejszego użytkownika |
» 2013-08-14 23:34:52 Wiem, ale dopiero sie oswajam z tym jezykiem, dlatego po prostu nie rozumiem ponizszego kodu i prosilbym o jego precyzyjne wytlumaczenie. cin.clear(); #ifdef _WIN32 cin.sync(); #else cin.ignore( numeric_limits < streamsize >::max(), '\n' ); #endif
Domyslam sie znaczenie powyzszego kodu, jednak wolalbym, aby nie byly to tylko domysly. |
|
MrPoxipol |
» 2013-08-15 00:00:39 Definicje preprocesora zostały użyte tylko po to, aby kod był łatwy w przenoszeniu na inne platformy. Równie dobrze, jeśli używasz Linuksa możesz napisać tylko tyle: cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' );
|
|
1 « 2 » 3 |