• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zrestartować kod po błędzie.

0 głosów
89 wizyt
pytanie zadane 18 lutego 2016 w C i C++ przez Uczen Użytkownik (600 p.)

Witam napisałem konwenter miar i chciałbym, żeby po błędzie restartował się, ale nie bardzo sobie z tym radzę, może mógłby mi ktoś coś podpowiedzieć?

#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>
using namespace std;


float conventer(float a, string qp);
void menuengine(char a);
string menuengine2(char a);
void menu();
void error();
int main()
{

    char x;

    cout<<" ______________________________________________"<<endl;
    cout<<"|***Meters, inches, jards, miles conventer.***"<<endl;
    for(;;)
    {
    cout<<"|Chce zamienic: "<<endl;

    cout<<"|m. metry"<<endl;
    cout<<"|c. cale"<<endl;
    cout<<"|j. jardy"<<endl;
    cout<<"|e. mile"<<endl;

   cout<<"|"; x=getch();

    menuengine(x);
    }


    return 0;
}
string qp;
void menuengine(char a)
{

    char x;
 switch(a)
    {
   case 'm':
    qp="m";
    menu();
    x=getch();
    qp.insert(1,menuengine2(x));
    break;
   case 'c':
    qp="c";
    menu();
    x=getch();
    qp.insert(1,menuengine2(x));
    break;
   case 'j':
    qp="j";
    menu();
    x=getch();
    qp.insert(1,menuengine2(x));
    break;
   case 'e':
    qp="e";
    menu();
    x=getch();
    qp.insert(1,menuengine2(x));
    break;
    default: error();     
    }

    float jednostka;
        switch(qp[0])
    {
   case 'm':

    cout<<"|Wpisz metry: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" metrow to: ";
    break;
   case 'c':
    cout<<"|Wpisz cale: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" cali to: ";
    break;
   case 'j':
    cout<<"|Wpisz jardy: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" jardow to: ";
    break;
   case 'e':
    cout<<"|Wpisz mile: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" mil to: ";
    break;
    }

     switch(qp[1])
    {
   case 'm':

    cout<<conventer(jednostka, qp)<<" metrów"<<endl;
    break;
   case 'c':
    cout<<conventer(jednostka, qp)<<" cali"<<endl;
    break;
   case 'j':
    cout<<conventer(jednostka, qp)<<" jardow"<<endl;
    break;
   case 'e':
    cout<<conventer(jednostka, qp)<<" mil"<<endl;
    break;
    }


cout<<"==============================================="<<endl;

}

void menu()
{
cout<<"na "<<endl;
cout<<"|m. metry"<<endl;
cout<<"|c. cale"<<endl;
cout<<"|j. jardy"<<endl;
cout<<"|e. mile"<<endl;
}

string menuengine2(char a)
{
switch(a)
    {
   case 'm': return "m"; break;
   case 'c': return "c"; break;
   case 'j': return "j"; break;
   case 'e': return "e"; break;
   default: error(); break;       
    }
}

float conventer(float a, string qp)
{

 if((qp=="mm")||(qp=="cc")||(qp=="jj")||(qp=="mm")) return a;
 else if(qp=="mc") return a*100/2.54;
 else if(qp=="mj") return a*0,9144;
 else if(qp=="me") return a*1000/1,609344;
 else if(qp=="cm") return a*0.0254;
 else if(qp=="cj") return a*0.0277777778;
 else if(qp=="ce") return a*1.57828283*10*-5*-5;
 else if(qp=="jm") return a*0.000568181818;
 else if(qp=="jc") return a*36;
 else if(qp=="je") return a*0.000568181818;
 else if(qp=="em") return a*1609.344;
 else if(qp=="ec") return a*63360;
 else if(qp=="ej") return a*1760;
}

void error()
{
    cerr<<"nie ma takiego wyboru"<<endl;
    exit(0);

}

Z góry przepraszam że kod jest taki pogmatwany, ale ćwiczyłem podprogramy i tak wyszło :p.

Chciałem zaznaczyc miejsca w kodzie, ale nie bardzo wiem jak

1 odpowiedź

0 głosów
odpowiedź 18 lutego 2016 przez MetGang Nałogowiec (34,380 p.)

Jedno proste słowo: pętla. Jeśli wystąpił błąd - wraca na początek, jeśli użytkownik chce jeszcze raz coś przekonwertować - wraca na początek, jeśli użytkownik chce zakończyć pracę z programem - zakańcza/łamie pętle.

komentarz 18 lutego 2016 przez Uczen Użytkownik (600 p.)

Hmmm, zamieniłem funkcje menuengine na inta i dodałem return 0 po ifie, ale zastanawiam się, czy dało się to zrobić jakoś inaczej?

int menuengine(char a)
{

    char x;
 switch(a)
    {
   case 'm':
    qp="m";
    menu();
    x=getch();
    if(menuengine2(x)=="f") {error(); return 0;}
    qp.insert(1,menuengine2(x));
    break;
   case 'c':
    qp="c";
    menu();
    x=getch();
    if(menuengine2(x)=="f") {error(); return 0;}
    qp.insert(1,menuengine2(x));
    break;
   case 'j':
    qp="j";
    menu();
    x=getch();
    if(menuengine2(x)=="f") {error(); return 0;}
    qp.insert(1,menuengine2(x));
    break;
   case 'e':
    qp="e";
    menu();
    x=getch();
    if(menuengine2(x)=="f") {error(); return 0;}
    qp.insert(1,menuengine2(x));
    break;
    default: error(); return 0;
    }

    float jednostka;
        switch(qp[0])
    {
   case 'm':

    cout<<"|Wpisz metry: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" metrow to: ";
    break;
   case 'c':
    cout<<"|Wpisz cale: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" cali to: ";
    break;
   case 'j':
    cout<<"|Wpisz jardy: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" jardow to: ";
    break;
   case 'e':
    cout<<"|Wpisz mile: "; cin>>jednostka;
    cout<<"|  "<<jednostka<<" mil to: ";
    break;
    }

     switch(qp[1])
    {
   case 'm':

    cout<<conventer(jednostka, qp)<<" metrów"<<endl;
    break;
   case 'c':
    cout<<conventer(jednostka, qp)<<" cali"<<endl;
    break;
   case 'j':
    cout<<conventer(jednostka, qp)<<" jardow"<<endl;
    break;
   case 'e':
    cout<<conventer(jednostka, qp)<<" mil"<<endl;
    break;
    }




}

void menu()
{
cout<<"na "<<endl;
cout<<"|m. metry"<<endl;
cout<<"|c. cale"<<endl;
cout<<"|j. jardy"<<endl;
cout<<"|e. mile"<<endl;
}

string menuengine2(char a)
{
switch(a)
    {
   case 'm': return "m"; break;
   case 'c': return "c"; break;
   case 'j': return "j"; break;
   case 'e': return "e"; break;
   default:  return "f";
    }

 

Podobne pytania

0 głosów
1 odpowiedź 43 wizyt
pytanie zadane 10 czerwca w Python przez Hajpa Użytkownik (730 p.)
+1 głos
3 odpowiedzi 2,740 wizyt
pytanie zadane 15 lipca 2015 w C i C++ przez Maurycy0621 Bywalec (2,140 p.)
+1 głos
1 odpowiedź 66 wizyt

88,408 zapytań

137,019 odpowiedzi

305,805 komentarzy

58,661 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...