můžete mi prosím někdo vysvětlit,jak pracuje nekonečná smyčka a za jakých podmínek ji lze opustit.Já jedu podle publikace c++ za 21 dní,konkrétně str.167,výpis 7.17
co by se stalo,kdybych úplně vypustil řádek 14?
řádek 40 if(konec) tady nemusí být rovnost nebo nerovnost,s čím se konec porovnává???
a je problém nekonečné smyčky někde lépe vysvětlen???Díky
Fórum › C / C++
Nekonečná smyčka
Nekonečná smyčka opakuje celý cyklus do nekonečna, jinak se to snad vysvětlovat nedá. Pokud by chyběla nějáká kontrolní proměnná (v tvém zdrojáku je to bool konec) a nenastavila by se poté na požadovanou hodnotu pro ukončení smyčky, tak by se smyčka opakovala donekonečna a nebylo by možné jí zastavit (kromě vypnutí programu). Výraz
if(konec)
znamená, že pokud je proměnná konec rovna true provede se blok příkazů po if.a není to spíš naopak - dokud je hodnota konec rovna false,bude se smyčka provádět stále?A proměnná může mít charakter bool,já myslel že pouze výraz?A navíc zde píšou,že na řádku 40 se vyhodnotí proměnná konec if(konec) ale tady se přece nic navyhodnocuje!!!!!!
To miguel: máš v tom docela bordel, ta proměnná se samozřejmě vyhodnocuje - pokud je true, cyklus končí a pokud je false, cyklus běží dál
a není to spíš naopak - dokud je hodnota konec rovna false,bude se smyčka provádět stále?
tak to zalezi na podmince uvedene u toho cyklu (predpokladam u while(...)).
A proměnná může mít charakter bool,já myslel že pouze výraz?
promenna muze mit charakter i integer -- 0 znamena false a cokoli nenuloveho je true.. lze tedy psat i if(1) coz je stejne jako if(true).
A navíc zde píšou,že na řádku 40 se vyhodnotí proměnná konec if(konec) ale tady se přece nic navyhodnocuje!!!!!!
Samotna promenna je v podstate taky vyraz -- vyhodnoti se tak, ze se zkontroluje hodnota promenne.
#include <iostream>
int nabidka();//prototyp fce,nepřijímá argumenty,vrací hodnotu int
void ProvedUkolJedna();//prototyp fce,nepříjímá argumenty,nevrací žádnou hodnotu
void ProvedUkoly(int);//prototyp fce,přijímá argumenty int,nevrací žádnou hodnotu
using namespace std;
int main()
{
int volba=nabidka();
while(volba!=5)
{
switch(volba)
{
case 1:ProvedUkolJedna();
break;
case 2:ProvedUkoly(2);
break;
case 3:ProvedUkoly(3);
break;
case 4:
break;
case 5:
cout<<"tohle bude asi konec";
break;
default:
cout<<"Prosim,vyberte znovu";
break;
}
if(volba==5)
break;
}
cin.get();
cin.get();
return 0;
}
int nabidka()
{
int volba;
cout<<"*******Nabidka*******\n";
cout<<"(1) Volba jedna\n";
cout<<"(2) Volba dva\n";
cout<<"(3) Volba tri\n";
cout<<"(4) Znovuzobrazeni nabidky\n";
cout<<"(5) Konec\n\n";
cout<<"volba: ";
cin>>volba;
return volba;
}
void ProvedUkolJedna()
{
cout <<"Provedl jsem ukol jedna";
}
void ProvedUkoly(int volba)
{
if(volba==2)
cout<<"Provedl jsem volbu 2...\n";
else
cout<<"Provedl jsem volbu 3....\n";
}
Já jsem si tady zkusil vytvořit alternativní smyčku,ale pořád se mi to seká,nevím,v čem je chyba,potřebuji,aby mi nabídka vyběhla vždy znovu.Díky
To miguel: jestli jsem to dobre pochopil, tak musis nekde (nejspis nakonci while cyklu) znovu volat volba=nabidka();, aby Ti vybehla nabidka.. Navic posledni dva radky toho while cyklu jsou tam zbytecne... Bych to zkusil takto:
do
{
int volba=nabidka();
switch(volba)
{
case 1:ProvedUkolJedna(); break;
case 2:ProvedUkoly(2); break;
case 3:ProvedUkoly(3); break;
case 4: break;
case 5: cout<<"tohle bude asi konec"; break;
default: cout<<"Prosim,vyberte znovu"; break;
}
} while(volba!=5)
tiez tak akrajovo -> da sa to aj s cyklom for :
for (;;)
{
vykonaj_prikazy();
}
ale uz je len na programatorovi aby ten cyklus aj naozaj niekedy skoncil pomocou prikazu breakPř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
Nekonecna smycka — založil papen
Reklamace: Nekonečná smyčka — založil Anonymní uživatel
TextWacher - Nekonečná smyčka — založil Matherz
Nekonecna velkost — založil Tayson
Opakování příkazu do nekonečna — založil Polarski
Moderátoři diskuze