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.
scanf("%d", &volba); ?
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 ?
Jo aha .. Zapoměl jsem ampersant .. Díky :)
Pochopil jsi to špatně, chybí ti tam &.
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 ?
das si tam cykus do{ }while a u toho while si budes testovat neco co si nastavis v tej default vetve napr. spatnavolba=TRUE apod. (pred tym switchom samozrejme spatnavolba inicializujes na FALSE)
Aha, do while vicemene chapu (udelej to, kdyz tamto..), ale takto to nechápu, hlavně teď nechápu s tou pravdou/nepravdou. :/
do while je cyklus, a ne udelej tamto kdyz tamto. Skus si to precitat este raz pomalsie, novu premennu BOOL spatnavolba snad zvladnes pridat, a testovat snad tiez. Ked tvoj prekladac nevie BOOL tak potom napr. pouzijes int spatnavolba, a hodnoty 0 a 1 namiesto FALSE a TRUE.
Cyklus_do-while
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 :)
to ocenujem ;) neni to nic komplikovane precitaj si ten link co som dal a potom to uz urcite bude jasne. Da sa to aj inymi sposobmi ale tak jak som pisal je to najprehladnejsie (najcitatelnejsi zdrojak).
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.