Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - switch ..

Ahoj, začínám se učit programovat v jazyce C.. Dnes jsem chtěl vyzkoušet switch.
Problém je, že po zadání volby mi program spadne..

#include <stdio.h>
#include <conio.h>
int main()

{
    float kc,celkemeuro,celkem,celkemkc,euro,eurozadani,kczadan,konec; /* Deklarace promennych */
    int volba; /* Deklarace promennych */
    euro = 25.7051452; /* Definice eura */
    printf("Zadejte pocet korun: ");
    scanf("%f",&kc); /* Zadani mnozstvi kc */
    getchar();
    celkem = kc/euro; /* Vypocet kc na eura */
    printf("%5.2f korun je %5.2f €uro",kc,celkem); /* Vypise vypocet */
    getchar();
    printf("Stisknutim pozadovaneho cisla si vyberte z nabidky:\n 1 - Koruny -> Eura \n 2 - Eura -> Koruny \n"); /* Info o menu */
    scanf("%d",volba); /* Vyber volby */
    switch(volba)
    {
    case 1: printf("Vybrali jste si Koruny -> Eura"); break; /* Kdyz volba 1 ..*/
    case 2: printf("Vybrali jste si Eura -> Koruny"); break; /* Kdyz volba 2 ..*/ 
    default: printf("Zadal jste spatnou volbu ..."); /* Kdyz ani volba 1 nebo 2 */
    }
    getchar();
    return 0;
}

Zacatek mam prevod ciste KC na eura, to bylo na rozproudění krve do mozku, to pak odstraním..
Něco v tom switchi mám asi špatně, akorát nevím co, snad někdo zkušenější to uvidí ihned jakmile na to mrkne.

Děkuji za rady.

Předmět Autor Datum
scanf("%d", &volba); ?
Wikan 13.11.2011 15:11
Wikan
Možná jsem to pochopil špatně. Ale myslel jsem to tak - Pokud zmáčkneš jedničku, vyhodí ti to první…
Michael04 13.11.2011 15:16
Michael04
Jo aha .. Zapoměl jsem ampersant .. Díky :)
Michael04 13.11.2011 15:16
Michael04
Pochopil jsi to špatně, chybí ti tam &.
Wikan 13.11.2011 15:17
Wikan
Tak jsem si s tím pohrál, funguje mi to tak, jak jsem chtěl. Jen bych se chtěl ještě zeptat, nějaký…
Michael04 13.11.2011 15:46
Michael04
das si tam cykus do{ }while a u toho while si budes testovat neco co si nastavis v tej default vetve…
MM.. 13.11.2011 15:54
MM..
Aha, do while vicemene chapu (udelej to, kdyz tamto..), ale takto to nechápu, hlavně teď nechápu s t…
Michael04 13.11.2011 16:08
Michael04
do while je cyklus, a ne udelej tamto kdyz tamto. Skus si to precitat este raz pomalsie, novu premen…
MM.. 13.11.2011 16:11
MM..
Díky moc :) Jdu to nastudovat a dodělat :) Takhle to stačí, Domací úkol jsem měl udělat pouze čistě…
Michael04 13.11.2011 16:18
Michael04
to ocenujem ;) neni to nic komplikovane precitaj si ten link co som dal a potom to uz urcite bude ja… poslední
MM.. 13.11.2011 18:02
MM..
inac ten program nemas blbovzdorny (ak zadas namiesto cisla volby nejake pismeno tak budes mat volba…
MM.. 13.11.2011 15:59
MM..

Možná jsem to pochopil špatně.
Ale myslel jsem to tak - Pokud zmáčkneš jedničku, vyhodí ti to první volbu, když dvojku, druhou volbu.
A case 1 nebo 2 tedy určuje co o kterou volbu se jedná, ne ? Pokud ne, tak jsem to asi opravdu pochopil špatně :-/
Jak jinak tedy se zadá výběr volby ?

Tak jsem si s tím pohrál, funguje mi to tak, jak jsem chtěl.
Jen bych se chtěl ještě zeptat, nějaký jednoduchý způsob, který mě zpátky hodí na výběrové menu, když zadám špatnou volbu ?

/*domaci ukol: sestav program pro prevod
kc na euro */
#include <stdio.h>
#include <conio.h>
int main()

{
    float kc,celkemeuro,celkem,celkemkc,euro,eurozadani,kczadan,konec; /* Deklarace promennych */
    int volba; /* Deklarace promennych */
    euro = 25.7051452; /* Definice eura */
    printf("Stisknutim pozadovaneho cisla si vyberte z nabidky:\n 1 - Koruny -> Eura \n 2 - Eura -> Koruny \n"); /* Info o menu */
    scanf("%d",&volba); /* Vyber volby */
    getchar();
    switch(volba)
    {
    case 1: {
            printf("Vybrali jste si Koruny -> Eura \n");
            printf("Zadejte mnozstvi korun: ");
            scanf("%f",&kc);
            getchar();
            printf("%5.2f Korun je %5.2f Euro",kc,celkem);
            }; break; /* Kdyz volba 1 ..*/
    case 2: {
            printf("Vybrali jste si Eura -> Koruny \n");
            printf("Zadejte mnozstvi Euro: ");
            scanf("%f",&eurozadani);
            getchar();
            celkemeuro = eurozadani*euro;
            printf("%5.2f Euro je %5.2f Korun",eurozadani,celkemeuro);
            }break; /* Kdyz volba 2 ..*/ 
    default: printf("Zadal jste spatnou volbu ..."); /* Kdyz ani volba 1 nebo 2 */
    }
    getchar();
    return 0;
}

Díky moc :) Jdu to nastudovat a dodělat :)
Takhle to stačí, Domací úkol jsem měl udělat pouze čistě převod z kč na euro, ale já si prostě chci udělat něco navíc a být popředu :) Ale s tím hozením na začátek menu v případě špatné volby si dodělám, plus udělám více blbuvzdorný

Ještě jednou, díky oběma :)

inac ten program nemas blbovzdorny (ak zadas namiesto cisla volby nejake pismeno tak budes mat volba neinicializovane (bude obsahovat totalnu haluz) a na vstupe konzoly ti ostane nieco co sa potom neskor nacita dalsim scanf (a to zasadne neches) apod.
Slusny program pri akomkolvek vstupe zvonku predpoklada a testuje nespravny vstup. scanf ma aj navratovu hodnotu. Prip. sa da na tu volbu pouzit getch() je to jednoduchsie aj pre uzivatela.

Zpět do poradny Odpovědět na původní otázku Nahoru