• 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.

Object Storage Arubacloud
0 głosów
222 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,360 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
2 odpowiedzi 462 wizyt
pytanie zadane 10 czerwca 2022 w Python przez Hajpa Użytkownik (880 p.)
+1 głos
3 odpowiedzi 4,582 wizyt
pytanie zadane 15 lipca 2015 w C i C++ przez Maurycy0621 Bywalec (2,140 p.)
+1 głos
1 odpowiedź 95 wizyt
pytanie zadane 31 marca 2023 w HTML i CSS przez zbiku25 Bywalec (2,940 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...