Diskuze: funkce

Člen

Zobrazeno 4 zpráv z 4.
Ahoj, v první řadě bych Tě poprosil příště použít náležité formátování kódu, protože tohle se nikomu číst nechce. Pro tentokrát to udělám za Tebe:
#include <iostream>
using namespace std;
int nahodna_akce(int nahoda) //daná funkce
{
srand(time(NULL));
int vysledek = (rand() % 101);
if ((vysledek >= 0) && (vysledek <= 49)) {
nahoda = 0;
cout << "Veta prvni" << endl;
return 0;
} else if ((vysledek >= 51) && (vysledek <= 60)) {
nahoda = 1;
cout << "Veta druha" << endl; // dodelat boj
return 1;
} else if ((vysledek >= 61) && (vysledek <= 100)) {
nahoda = 2;
cout << "Veta treti" << endl;
return 2;
}
}
int main() {
int nahoda = 1;
nahodna_akce(nahoda); //vyvolání funkce
if (nahodna_akce(nahoda) == 1) {
cout << "Nahoda = 1" << endl;
} else if (nahodna_akce(nahoda) == 2) {
cout << "Nahoda = 2" << endl;
} else if (nahodna_akce(nahoda) == 0) {
cout << "Nahoda = 0" << endl;
}
}
A teď k tomu bugu. "Problém" je v tom, že funkci
nahodna_akce()
voláš potenciálně uvnitř funkce
main()
hned několikrát. Jak jistě víš, takové volání funkce
způsobí, že celý její kód, v Tvém případě včetně výpisu dané
věty, se pokaždé vykoná znovu.
Více o problematice funkcí v C++ si můžeš přečíst třeba v místním
seriálu - https://www.itnetwork.cz/…ce-cplusplus
Včera večer už se mi nechtělo, ale tady je ještě opravený kód, aby to
bylo snad úplně jasné.
#include <iostream>
#include <cstdlib>
using namespace std;
int nahodna_akce() // Definice funkce.
{
srand(time(NULL));
int vysledek = (rand() % 101);
if ((vysledek >= 0) && (vysledek <= 50)) {
cout << "Veta prvni" << endl;
return 0;
} else if ((vysledek >= 51) && (vysledek <= 60)) {
cout << "Veta druha" << endl;
return 1;
} else if ((vysledek >= 61) && (vysledek <= 100)) {
cout << "Veta treti" << endl;
return 2;
}
}
int main() {
int nahoda = nahodna_akce(); // Vyvolání funkce s navrácením výsledku.
if (nahoda == 0) {
cout << "Nahoda = 0" << endl;
} else if (nahoda == 1) {
cout << "Nahoda = 1" << endl;
} else if (nahoda == 2) {
cout << "Nahoda = 2" << endl;
}
return 0;
}
P.S.: Je to psané pro stařičké C++98.
Děkuju mnohokrát a příště se polepším s tím formátováním kódu.
Zobrazeno 4 zpráv z 4.