[ kUdtiHaEX @ 19.10.2002. 22:37 ] @
Nabavio sam neku knjigu za koju sam mislio da ce mi pomoci da savlad ono najosnovnije...ali ponovo imam problema.
Naime, napisao sam sledeci program:

#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{
string user_name;
cout << "Upisite svoje ime: ";
cin >> user_name;
cout << '\n';
cout << "Zdravo, ";
cout << user_name;
cout << " i dovidjenja! \n";
return 0;
}
Program bi treabo da od korisnika zatrazi ime i onda da ga pozdravi...nista tesko zar ne? E pa nije bas tako..
Kada sve lepo napisem, buni se kod naredbe USING NAMESPACE STD (invalid namespace)???
Da li ima neko ideju u cemu je problem???
[ Dejan Krstic @ 19.10.2002. 23:54 ] @
Code:


#include <iostream>
#include <string>

using namespace std;

void main()
{
string user_name = "";
cout << "Upisite svoje ime: ";
cin >> user_name;
cout << "\n Zdravo, " << user_name << " i dovidjenja! \n";
}

[ kUdtiHaEX @ 20.10.2002. 21:25 ] @
Sta znaci string user_name = ""; tj = ""? I zasto void main?
[ Goran Rakić @ 20.10.2002. 21:34 ] @
="" - inicijalizujes promenjlivu da bude prazan string
a void zato sto ne vracas nista (return 0) iz main funkcije. Ako stavis return 0 onda ide int main()...
[ leka @ 20.10.2002. 23:23 ] @
Ama ljudi, samo je trebalo izbaciti .h iz #include <iostream.h> i #include <string.h>. Program ovog momka je zapravo tacan, samo bez ".h" ...
[ leka @ 20.10.2002. 23:30 ] @
A sto se void main() tice... To je LOSA programerska praksa, da koriste void main(). Najispravnije je int main() , kao sto je covek na pocetku napisao, sa odgovarajucim return 0;

A jos ispravnije je sa int main(int argc, char** argv) { ... return 0; }

Na pitanje "zasto" nemam vremena da odgovaram, ima ovde jos ljudi koji bi rado to odgovorili - to su fundamentalne stvari, tako da sam siguran da vecina Vas zna zasto program "treba da vrati" 0 (odnosno 1 u odredjenim situacijama).
[ Dejan Krstic @ 20.10.2002. 23:41 ] @
Pa problem koji je kompajler prijavljivao se resava tako sto se izbaci .h ali sam hteo momku da skrenem paznju na jos neke stvari. Da vidi kako to moze lakse, brze i jednostavnije. Istina, nisam bio sinoc raspolozen za objasnjavanje a i mislio sam da ce biti ocigledno.

Dakle kao sto je kolega rekao:

string user_name = "";

To je zato sto je pozeljno svakoj promenljivoj dodeliti vrednost odmah po deklarisanju. Neko se pridrzava toga, neko ne. U svakom slucaju nece biti greska i ako se to ne uradi.

Drugo:

void main()

Ako ti nije poznato pri deklarisanju metode prvo se kaze sta ce da vraca metoda (u ovom slucaju void odnosno nista), pa se kaze koji je naziv metode (dakle main) i u zagradi koje parametre metoda prima (ne prima parametre).

Ono sto si ti napisao, int main() pa kasnije return 0, nije greska ali je u ovom slucaju nepotrebno.

I ono sa cout u jednom redu nije tesko ukapirati tako da to necu da pojasnjavam.
[ Dejan Krstic @ 20.10.2002. 23:52 ] @
Citat:
leka:
A sto se void main() tice... To je LOSA programerska praksa, da koriste void main(). Najispravnije je int main() , kao sto je covek na pocetku napisao, sa odgovarajucim return 0;

A jos ispravnije je sa int main(int argc, char** argv) { ... return 0; }

Na pitanje "zasto" nemam vremena da odgovaram, ima ovde jos ljudi koji bi rado to odgovorili - to su fundamentalne stvari, tako da sam siguran da vecina Vas zna zasto program "treba da vrati" 0 (odnosno 1 u odredjenim situacijama).


Potpuno tacno ali za primer koji ovaj momak ima sasvim dobro radi posao i void.

Njemu ne treba da hvata argumente sa komandne linije niti da vrsi neko zesce debagovanje pa da mora da hvata koju je vrednost nit vratila :)
[ Gojko Vujovic @ 29.03.2006. 14:41 ] @
Mislim da Leka priča o dobroj programerskoj praksi Krstiću, a ne da li će u ovom konkretnom slučaju raditi i ako ne vraća ništa, ili ne. Poenta je da čovek nauči da piše dobar kod, a to se uči od ovakvih početaka.
[ X Files @ 29.03.2006. 14:51 ] @
Najnoviji standard je jasan sto se tice "void main()", i o tome se ovde već diskutovalo. Treba
koristiti "int" a argumente prema potrerbama. Tačno je da će program raditi i sa "void", ali postoje
situacije, na primer kada se prave posebni EXE-i kao podrška nekim instalacijama kada je bitno
znati šta je main() vratio.

Ipak bi trebalo poštovati standard, barem radi principa.
[ leka @ 31.03.2006. 03:16 ] @
Kao sto je receno, izbegavati void main() jer nije prema standardu. Takodje prema standardu se vise ne koriste .h zaglavlja (ISO C++), vec prosto "uvlacite" bez ".h". Primera radi, ispravno je #include <functional> umesto #include <functional.h> .