Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python

Diskuze: Problém se vstupy.

Aktivity (2)
Avatar
Jan Michálek:10.10.2018 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.10.2018 6:58
Nemá cenu nic programovat, pokud se to neprogramuje geniálně.
Avatar
Odpovídá na Jan Michálek
Matúš Olejník:10.10.2018 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.10.2018 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.10.2018 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.10.2018 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.