co zrobic aby po wpisaniu do strumienia wejsciowego liczby przecinkowej powtorzylo cala pętle do{}while
Ostatnio zmodyfikowano 2014-02-10 19:09
sebastian333 Temat założony przez niniejszego użytkownika |
co zrobic aby po wpisaniu do strumienia wejsciowego liczby przecinkowej powtorzylo cala pętle do{}while » 2014-02-10 15:31:33 #include <iostream>
using namespace std;
int main() { cout<<"Jest to program do liczenia pola trojkata lub jego obwodu"<<endl<<endl; int w1,d=2; int bI,b2,b3,obw,y; int p,j,k; float g=(float)p; float h1=(float)j; float b1=(float)k;
do { cout<<endl<<endl<<"Wybrane operacje matematyczne"<<endl<<endl; cout<<"[1]Pole trojkata"<<endl; cout<<"[2]Obwod trojkata"<<endl; cout<<"[3]Wylacz program"<<endl<<endl;
do {
cout<<endl<<endl<<"Ktora operacje chcesz wybrac ? "; cin>>w1; if(cin.fail()||w1<1||w1>3) { cout<<endl<<"Musisz wprowadzic liczbe z zakresu <1,3> !"; cin.clear(); cin.sync();
}
}while(cin.fail()||w1<1||w1>3);
cout<<endl<<"Wybrales operacje nr-"<<w1; switch(w1) { case 1:
cout<<" Czyli liczenie pola trojkata"<<endl<<endl; do { if(cin.fail()||h1<=0) { cout<<endl<<"Takie dane nie spelniaja warunkow..."<<endl<<endl; cin.clear(); cin.sync(); } cout<<"Wprowadz teraz dlugosc wysokosci "; cin>>h1; }while(cin.fail()||h1<=0); do { if(cin.fail()||b1<=0) { cout<<"Takie dane nie spelniaja warunkow..."<<endl; cin.clear(); cin.sync(); } cout<<endl<<"Wprowadz teraz dlugosc boku na, ktory opuszczona jest wysokosc "; cin>>b1; cout<<endl; }while(cin.fail()||b1<=0);
g=(h1*b1)/2;//mnozenie ,liczenie pola
cout<<endl<<endl<<"Pole tego trojkata wynosi... "<<g; break;
case 2: cout<<" Czyli liczenie obwodu trojkata"; do { do { if(cin.fail()||bI<=0) { cout<<endl<<"To nie jest liczba "; cin.clear(); cin.sync(); } cout<<endl<<endl<<"Wprowadz teraz dlugosc pierwszego boku "; cin>>bI; }while(cin.fail()||bI<=0);
do { if(cin.fail()||b2<=0) { cout<<endl<<"To nie jest liczba"; cin.clear(); cin.sync(); } cout<<endl<<endl<<"Wprowadz teraz dlugosc drugiego boku "; cin>>b2; }while(cin.fail()||b2<=0);
do { if(cin.fail()||b3<=0) { cout<<endl<<"To nie jest liczba"; cin.clear(); cin.sync(); }
cout<<endl<<endl<<"Wprowadz teraz dlugosc trzeciego boku "; cin>>b3; }while(cin.fail()||b3<=0); obw=bI+b2+b3;
cout<<endl<<endl<<"Obwod tego trojkata wynosi... "<<endl<<obw;
}while(cin.fail()); break;
case 3:
break; } }while(w1!=3); cout<<endl<<endl<<"Program zakonczyl dzialanie"<<endl; return 0; }
Tak wygląda program, który napisałem działa wszystko jak natura chciała : D tylko jest problemik, właściwie niuansik... Denerwuje mnie jedna rzecz prosze zerknąć na ten fragment kodu :
do {
cout<<endl<<endl<<"Ktora operacje chcesz wybrac ? "; cin>>w1; if(cin.fail()||w1<1||w1>3) { cout<<endl<<"Musisz wprowadzic liczbe z zakresu <1,3> !"; cin.clear(); cin.sync();
}
}while(cin.fail()||w1<1||w1>3);
Jak widać zablokowałem możliwość wpisania liter oraz liczb większych od 3 i mniejszych od 1 ale nie mam pojęcia jak zablokować liczby przecinkowe przedział (1,2)U(2,3). To strasznie irytujące wiem o tym, że gdy wprowadze dajmy na to liczbe 2.1 program uruchomi liczenie obwodu oznaczony liczba 2, jednak jeżeli jest jakaś opcja zablokowania tego chce o tym wiedzieć.Prosze o wyrozumiałość programuje około miesiąc spodobało mi się to, jednak niektóre zagadnienia trzeba ćwiczyć wiele razy bo szybko wylatują z głowy, chciałbym sie nauczyć podstaw w stopniu bardzo dobrym do wakacji mam nadzieje, że jakoś to ogarne. Czytelność kodu też nie należy do najlepszych, bardziej skupiłem się na działaniu programu niż na jego estetyce.
|
|
alixir |
» 2014-02-10 19:09:05 Używaj znaczników [cpp][/cpp] A co do twojej pętli to możesz ją zapisać np. tak: while( true ) { cout << endl << endl << "Ktora operacje chcesz wybrac ? "; cin >> w1; if( cin.fail() || w1 < 1 || w1 > 3 || getchar() != '\n' ) { cout << endl << "Musisz wprowadzic liczbe z zakresu <1,3> !"; cin.clear(); cin.sync(); continue; } break; } Aha i oczywiście dołącz #include <stdio.h> |
|
« 1 » |