IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problém se vstupy.

Aktivity
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í
+2,50 Kč
Ř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
10.10.2018 13:23
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.