int main()
{
cout << "nabidka 1 ...1\n"; // tady se voli jedna nebo druha nabidka
cout << "nabidka 2 ...2\n";
int choice;
cout << "\nVase volba: "; // TADY je problem, kdyz ve spustenem programu zadam pismeno, program se zhrouti. Jak udelatabys to vyhodilo nejakou chybovou hlasku?
cin >> choice;
switch (choice)
{
case 1:
prvni();
break;
case 2:
druha();
break;
default:
cout << "Chyba";
main();
}
cout << "\nA - pokracuj, N -konec.\n";
char x;
cin >> an;
if (x == 'a' || x == 'A')
{cout << "\n";
main();}
else {return 0;}
}
Fórum › C / C++
Chyba programu - switch
protoze volas pri chybnem zadani rekurzivne main...
velice brzo si zaberes veskerou volnou pamet zasobniku a zdechne to ...
slysel si nekdy o cyklech?
+ kdyz to ceka cislo tak pri znaku se zablokuje cin ,.. musis mu nastavit ze uz neni chyba .. jinak nic dalsiho nikdy uz nenactes..
tj. cin uz automaticky navzdy konci chybou - neceka se na nic - rekurze
pravdepodobne budes potrebovat otestovat pomoci cin.error()
a pak neco jako:
cin.clear(); /* nastavit stream jako ze je uz zase v poradku */
cin.ignore(numeric_limits<streamsize>::max(), '\n'); /* a pokud mozno se zbavit vsech znaku na vstupu.. aby to pak taky na neco jeste cekalo */
To nevim : proste kdyz se snazis o todle:
int volba;
cin >> volba;
a napises cokoliv jineho nez cislo tak se cin nastavi do rezimu "chyba" a dokud to nezrusis tak z nej uz nikdy nic nemuzes dostat
To nevim : po nacteni moznosti otestujes jestli to probehlo jak melo pomoci cin.error()
a kdyz ne tak si nastavis volbu na hodnotu treba 0
a potom pomoci cin.clear() zrusis zablokovani cin
a pomoci cin.ignore(numeric_limits<streamsize>::max(), '\n'); zase vymazes ty znaky co zpusobily chybu, az do konce radku
Použil bych zcela určitě cyklus while a čekal ve smyčce, než uživatel zadá opravdu volbu jedna nebo dvě. A ještě bych přidal možnost ukončit program. Uživatel by měl mít tuto možnost. Tedy alespoň mě to tak učili. A my začátečníci by jsme se měli vyhýbat break a continue. Tady v tomto jednoduchém programu to není problém, ale při složitějších věcech to bude hodně nepřehladné. Těžko se v tom potom orientuje.
Jinak zdravím vás všechny. Jsem tady nový a taky se tím prodírám. :smile1:
To RobinP : S tim break: 1. jak jinak bys chtel udelat switch bez break? 2. Ja si naopak myslim, ze break program zjednodusi - bez breaku si programovani dokazu jen ztezi predstavit a pokud ho budes pouzivat, tak s tim nebudes mit problem..
Napr. : for(int i=0;i<10;i++){
//zdroj
if(a==b)//podminka pro vyskoceni z cyklu
i=10;//lepsi je break;
}
LJ1024 napsal:
To RobinP : S tim break: 1. jak jinak bys chtel udelat switch bez break? 2. Ja si naopak myslim, ze break program zjednodusi - bez breaku si programovani dokazu jen ztezi predstavit a pokud ho budes pouzivat, tak s tim nebudes mit problem..
Napr. : for(int i=0;i<10;i++){
//zdroj
if(a==b)//podminka pro vyskoceni z cyklu
i=10;//lepsi je break;
}
Díky za osvětu. Ano máš pravdu. Jinak to ani nejde u switch.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Chyba v programu — založil vasek.t
Chyba v programu — založil choice_
Chyba v programu — založil
Chyba programu — založil bbeni
Chyba vo výpise programu — založil WhatsThiSs
Moderátoři diskuze