Jak vrátit řetězec v c++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak vrátit řetězec v c++ – C / C++ – Fórum – Programujte.comJak vrátit řetězec v c++ – C / C++ – Fórum – Programujte.com

 

ondy130
Duch
7. 1. 2009   #1
-
0
-

jsem začínající programátor v c++ a potřeboval bych vědět jak vrátit ve funkci řetězec? mám následující kód:



#include <iostream>

using namespace std;



void vyber_postava();

int main()

{

vyber_postava();



cout << "Vaše postava:\n===============\nJméno: " << jmeno_postava << "\nRasa: " << rasa_postava << "\nSíla: " << sila_postava << "\nMagie: " << magie_postava << endl;



cout << "\nPro ukončení zmáčkněte [Enter]...";

cin.get();

cin.get();

return 0;

}



void vyber_postava(){

int sila_postava;

int magie_postava;

char jmeno_postava[30];

cout << "Tvorba postavy: \n";

cout << "Zadejte jméno: ";

cin.getline(jmeno_postava, 30);

bool postava_vybrana = false;

cout << "\nVyberte rasu: \n1 - člověk(střední síla, střední magie)\n2 - barbar(vysoká síla, nízká magie)\n3 - elf(nízká síla, vysoká magie)";

while (postava_vybrana == false){

int rasa;

cin >> rasa;

if (rasa == 1){

sila_postava = 2;

magie_postava = 2;

char rasa_postava[] = "Člověk";

postava_vybrana = true;

}

else if (rasa == 2){

sila_postava = 3;

magie_postava = 1;

char rasa_postava[] = "Barbar";

postava_vybrana = true;

}

else if (rasa == 3){

sila_postava = 1;

magie_postava = 3;

char rasa_postava[] = "Elf";

postava_vybrana = true;

}

else {

cout << "Musíte zadat číslo od 1 do 3:\n";

}

}

return;

}


a nevím jak mám vrátit do main() f-ce zjištěné za pomoci f-ce vyber_postavy()
prosím poraďte někdo

Nahlásit jako SPAM
IP: 77.236.210.–
KIIV
~ Moderátor
+43
God of flame
7. 1. 2009   #2
-
0
-

mozna kdyby si nadefinoval tu funkci jako ze vraci retezec a vyuzit return...

nebo predal ukazatel kam se retezec ma ulozit (a nezapomenout si na nej udelat taky misto v ram)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
syncmaster
~ Anonymní uživatel
3 příspěvky
7. 1. 2009   #3
-
0
-

nejaky smejd mi zmazal moj prispevok pred tymto , ale tento kod mi slape , proste si nedeklaroval premenne vo funkcii main

#include <iostream>

using namespace std;



void vyber_postava();

int main()

{

vyber_postava();
int sila_postava;

int magie_postava;

char jmeno_postava[30];
char rasa_postava[] = "Člověk";



cout << "Vaše postava:\n===============\nJméno: " << jmeno_postava << "\nRasa: " << rasa_postava << "\nSíla: " << sila_postava << "\nMagie: " << magie_postava << endl;



cout << "\nPro ukončení zmáčkněte [Enter]...";

cin.get();

cin.get();

return 0;

}



void vyber_postava(){

int sila_postava;

int magie_postava;

char jmeno_postava[30];

cout << "Tvorba postavy: \n";

cout << "Zadejte jméno: ";

cin.getline(jmeno_postava, 30);

bool postava_vybrana = false;

cout << "\nVyberte rasu: \n1 - člověk(střední síla, střední magie)\n2 - barbar(vysoká síla, nízká magie)\n3 - elf(nízká síla, vysoká magie)";

while (postava_vybrana == false){

int rasa;

cin >> rasa;

if (rasa == 1){

sila_postava = 2;

magie_postava = 2;

char rasa_postava[] = "Člověk";

postava_vybrana = true;

}

else if (rasa == 2){

sila_postava = 3;

magie_postava = 1;

char rasa_postava[] = "Barbar";

postava_vybrana = true;

}

else if (rasa == 3){

sila_postava = 1;

magie_postava = 3;

char rasa_postava[] = "Elf";

postava_vybrana = true;

}

else {

cout << "Musíte zadat číslo od 1 do 3:\n";

}

}

return;

}

Nahlásit jako SPAM
IP: 91.127.137.–
MaS0
Návštěvník
7. 1. 2009   #4
-
0
-
Nahlásit jako SPAM
IP: 195.146.114.–
syncmaster
~ Anonymní uživatel
3 příspěvky
7. 1. 2009   #5
-
0
-

aha , tak sa ospravedlnujem :D

Nahlásit jako SPAM
IP: 91.127.137.–
MaS0
Návštěvník
8. 1. 2009   #6
-
0
-

To syncmaster : a jseš si jistej, že ten kód funguje??......já bych řek, že když vytvoříš proměnné v main a pak další lokální ve funkci vyber_postava, tak zadaný informace ukládáš do lokálních a když se funkce ukončí, lokální proměnné se smažou a data taky, protože jsi je nijak nevrátil do main.....
možné řešení je použít globální proměnné, nebo ve funkci vyber_postava mit buffer a do toho pomocí funkce sprintf naformátovat zadané informace, pak pomocí new/malloc alokovat paměť o velikosti výsledného řetězce, zkopírovat do ní buffer a pomocí return na ní vrátit ukazatel->poté jen v main vytisknout vrácený řetězec a uvolnit paměť.....

Nahlásit jako SPAM
IP: 195.146.114.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
8. 1. 2009   #7
-
0
-

MaS napsal:
To syncmaster : a jseš si jistej, že ten kód funguje??......já bych řek, že když vytvoříš proměnné v main a pak další lokální ve funkci vyber_postava, tak zadaný informace ukládáš do lokálních a když se funkce ukončí, lokální proměnné se smažou a data taky, protože jsi je nijak nevrátil do main.....
možné řešení je použít globální proměnné, nebo ve funkci vyber_postava mit buffer a do toho pomocí funkce sprintf naformátovat zadané informace, pak pomocí new/malloc alokovat paměť o velikosti výsledného řetězce, zkopírovat do ní buffer a pomocí return na ní vrátit ukazatel->poté jen v main vytisknout vrácený řetězec a uvolnit paměť.....


promiň ale moc tomu nerozumim, u kurzu v c++ tady na programujte jsem zatim v 7. lekci... šlo by to vysvětlil nějak pro blbce třeba i na kousku kodu prosím?

Nahlásit jako SPAM
IP: 195.113.146.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 26 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý