Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

co zrobic aby po wpisaniu do strumienia wejsciowego liczby przecinkowej powtorzylo cala pętle do{}while

Ostatnio zmodyfikowano 2014-02-10 19:09
Autor Wiadomość
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.










P-104380
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:

C/C++
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>
P-104389
« 1 »
  Strona 1 z 1