Pomoc w kodzie - obsługa błędnych wartości

0

Witam, nie wiem czy to dobre miejsce na szukanie pomocy, ale mam pewien problem. Zacząłem niedawno naukę programowania i nie wiem jak napisać program, który będzie liczyć obwód trójkąta, ale jednocześnie przy wpisaniu danych na minusie lub zero będzie wracać do początku programu, wyświetlając komunikat "Podano złą wartość". Podejrzewam, że będzie tutaj zabawa z while, lecz pewności nie mam, niżej podsyłam kod, który działa "jako-tako". Z góry dziękuję za pomoc.

#include <iostream>

using namespace std;

int main()
{
    cout<< "Program do liczenia obwodu trojkata"<<endl;
    int a,b,c;
  {
cout << "Podaj pierwszy bok: ";
{
    cin>>a;
    if (a<=0)
        cout<< "Prosze podac wlasciwa wartosc"<<endl;
}
cin>>a;
}
   {
cout<<"Podaj drugi bok: ";
    cin>>b;
    if (a<=0)
        cout<< "Prosze podac wlasciwa wartosc"<<endl;
cin>>b;
   }
{cout<<"Podaj trzeci bok: ";
    cin>>c;
    if (a<=0)
        cout<< "Prosze podac wlasciwa wartosc"<<endl;
    }
    cin>>c;

    cout << "Obwod trojkata wynosi: "<<a+b+c;

return 0;
}
4
  1. Za każdym razem sprawdzasz czy pierwszy bok jest mniejszy lub równy 0. Jak użytkownik wprowadza b to sprawdzaj czy b <=0, a nie a.
  2. Jak dobrze zatytułować wątek?
  3. Na pewno wiesz kiedy należy stawiać znaki "{" i "}" i jak stosować instrukcje warunkowe? Trochę bez sensu postawione.
    Jak poprawisz znaki { } to będzie działać. Na razie nie działa w ogóle. Zanim będziesz chciał dodać nowe funkcje napraw to co jest teraz bo potem się pogubisz zupełnie i nie zadowalaj się, że działa "jako tako" (a nie działa) bo Cię to w przyszłości zgubi i będziesz godzinami szukał błędu, który łatwo byłoby wykryć na początku.
    Jak już uporządkujesz kod to zerknij na niego jeszcze raz i pomyśl raz jeszcze jak zastosować pętle żeby działało tak jak chcesz.
2

Podejrzewam, że będzie tutaj zabawa z while

Niekoniecznie, można użyć rekurencji:

#include <iostream>

using namespace std;

int get( const string& info = "" )
{
    int value {0};
    cout << info << endl;
    cin >> value;
    if( value<=0 )
    {
         cout << "Side must be greater then zero" << endl;
         cin.clear();cin.ignore();
         return get(info);
    }
    return value;
}

int main()
{
    const auto perimeter = get("Enter a side a: ")+get("Enter a side b: ")+get("Enter a side c: ");
    cout << "Perimeter = " << perimeter << endl;
    return 0;
}
1

Nie pisz wszystkiego w main()

Gdybyś miał pojedyncze obliczenie wydzielone do funkcji, możesz o wiele bardziej komfortowo kontrolować to w pętli, na przykład w main() - i to by było w main tyle, nic więcej

1 użytkowników online, w tym zalogowanych: 0, gości: 1