Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací
Avatar
Jan Michálek:10. října 6:58

Zdravím,

včera jsem tu otravoval se stejným kodem, ale problém je teď někde jinde a už opravdu vůbec nevím kde. Můj kod je zde

#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
#include <string>
#include <iomanip>


using namespace std;

int main()
{
    cout << fixed << showpoint << setprecision(4);
    cout << "Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh" << endl;
    char vstup;
    cin >> vstup;
    if (vstup == 'a'){
        cout << "Zadejte stranu ctverce:" << endl;
        double StranaCtverce;
        cin >> StranaCtverce;
        if (StranaCtverce > 0){
            cout << "Obsah ctverce je: " << StranaCtverce*StranaCtverce << endl;
            cout << "Obvod ctverce je: " << 4*StranaCtverce << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else if (vstup == 'b'){
        cout << "Zadejte strany obdelniku:" << endl;
        double StranaObdelniku1, StranaObdelniku2;
        cin >> StranaObdelniku1 >> StranaObdelniku2;
        if (StranaObdelniku1>0 && StranaObdelniku2>0){
            cout << "Obsah obdelniku je: " << StranaObdelniku1*StranaObdelniku2 << endl;
            cout << "Obvod obdelniku je: " << 2 * (StranaObdelniku1+StranaObdelniku2) << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else if (vstup == 'c'){
        cout << "Zadejte polomer kruznice:" << endl;
        double PolomerKruznice;
        cin >> PolomerKruznice;
        if (PolomerKruznice>0){
            cout << "Obsah kruznice je: " << M_PI * (PolomerKruznice*PolomerKruznice) << endl;
            cout << "Obvod kruznice je: " << 2*M_PI*PolomerKruznice << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else{
        cout << "Nespravny vstup." << endl;
    }
    return 0;
}

Kontrola programu proběhne přes automaticky program, který tam začne sypat data a výstup mého programu musí být stejný jako výstup programu od učitele (soubor ref). Přikládám soubory, ktde je ukázané co tam přišli za data (soubor in) a co program vypustil ven (soubor out).
Pokud, ale já zadám na vstup char symbol a. tak mi prostě program běží jak má. Nemůžu prostě docílit toho problému co automatický program od učitele a tím pádem nevím kde mám chybu.

Byl by někdo tak hodný a pomohl by mi? Vůbec si už nevím rady.

Zde ke stahnutí soubory v .rar formátu https://uloz.to/…uB7eCq/c-rar

Odpovědět 10. října 6:58
Nemá cenu nic programovat, pokud se to neprogramuje geniálně.
Avatar
Odpovídá na Jan Michálek
Matúš Olejník:10. října 11:45

Použitím cin.fail() sa dá zistiť či sa vstup podarilo úspešne načítať a priradiť do premennej.
Zmena

if (StranaCtverce > 0){

na

if (!cin.fail() && StranaCtverce > 0){

by mala pomôcť :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 10. října 11:45
/* I am not sure why this works but it fixes the problem */
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jan Michálek
DarkCoder:10. října 13:23

Pár drobností:

Program musí běžet v cyklu (do), jinak těch dat moc nepřijmeš.

Dále by program měl být schopen přijmout instrukci pro ukončení, kterou Ti druhý program zašle.

Používat řídící příkaz switch namísto schodů if-else-if.

Dokonale znát co a v jakém tvaru Ti data přichází. Dost pravděpodobně to bude vypadat takto:

a 3.0
a 10.5
b 2.1 5.8
b 4.3 4.3
...
c 5.9
k

Ale také nemusí (může být třeba i takto: a(3.0))

Neboj se komunikovat o tom s učitelem. Ten by Ti měl zodpovědět veškeré nejasností, které v zadání a poskytnutých informací jsou.

Nahoru Odpovědět  +2 10. října 13:23
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.