[ k4rl0 @ 12.08.2006. 16:56 ] @
Vec dosta vremena programiram u C++u,i ovlado sam sa svim vaznim djelovima(pokazivaci,objektna orijentiranost,klase,nasljedivanja,blablabla..).
Naime,namjeravam se kasnije bavit programiranjem profesionalno,pa me zanima neoliko stvari:

1.Cime se C++ namece kao konkurencija drugim jezicima,nije nista bolji od npr. C# ili Jave,koji su
manji i laksi od njega.Dakle,ima li mjesta za C++ u buducnosti i dal se isplati uciti ga sada?
2.Ako se nastavim njime bavit,kuda da dalje krenem..Radio bih nesto slozeno poput igrica,aplikacija,
itd. al ne znam sta da sad krenem ucit(API,MFC,DirectX,STL..?)
Znam da su pitanja malo glupa i vec odgovorena,al zahvaljujem na odgovorima.

Pozdrav
[ Goran Arandjelovic @ 12.08.2006. 17:27 ] @
1. To sad nekako dođe i stvar ukusa. Ali..ali, C# je čist .NET jezik i samim tim "ograničen" .NET frameworkom (koji je doduše ogroman..), dok je C++ (i C++/CLI sada) moćniji jer i dalje imaš na raspolaganju nekontrolisani kod i potpunu kontrolu. A i ako hoćeš da koristiš jednu od najmoćnijih biblioteka, STL, izbor je C++. A i ako pišeš sotfver koji je vremenski zahtevan, definitivno je C++ najlogičniji izbor.

2. Gde ćeš igre?:) Igre se teško pišu u C#. :) MFC batali i uči .NET. Vidi šta ti pruža .NET (a pruža zaista mnogo) i ako tu nađeš sve što ti je potrebno...C# je fin izbor.
[ k4rl0 @ 12.08.2006. 17:57 ] @
Znaci preporuka je da krenem na MFC i .NET??
Ok,ima jos ko kakav odgovor na pitanja..
[ Goran Arandjelovic @ 12.08.2006. 22:17 ] @
Ne...rekoh ti da batališ sa učenjem MFC-a ;)
[ k4rl0 @ 12.08.2006. 22:19 ] @
Ajoj,nisam bas skuzio ovaj "batalis",pardon.
Koji dio da onda krenem ucit,samo .NET?
Jel WinAPI isto bataljenje??
[ NastyBoy @ 12.08.2006. 22:45 ] @
Na temu shta valja (i kako) uchiti - jako mi se dopada ono shto je Joel Spolsky napisao:

http://joelonsoftware.com/articles/ThePerilsofJavaSchools.html


[ k4rl0 @ 15.08.2006. 19:50 ] @
Da ne otvaram novu temu..
Imam u jednom fajlu spremljene brojeve,svaki u novom redu.
Trebam ih ucitat i spremit u polja tipa int.
Problem je sto funkcija getline kao drugi parameta uzima string,tj. ono
sto sprema,mora spremit u string,a meni treba u obliku integera.
Jel mogu nekakav static_cast izvest iz stringa u int,ili postoji metoda
da ih spremim kao int direktno,fala,pozz..
(Po mogucnosti bez stdio librarya,nego uz fstream)
[ icobh @ 15.08.2006. 20:05 ] @
Ja znam dva rešenja:

1. stdlib i f-ja atoi (pošto si rekao da ne koristimo stdio )
2. fscanf(poonter on file,"%d", &a);
[ k4rl0 @ 16.08.2006. 12:44 ] @
Fala al trebam to rijest samo uz iostream i fstream
[ Dragi Tata @ 16.08.2006. 12:58 ] @
http://www.research.att.com/~bs/bs_faq2.html#int-to-string

http://www.novetehnologije.com/Default.aspx?tabid=86
[ k4rl0 @ 16.08.2006. 13:04 ] @
Ma hvala,to se trazi,poz..
[ k4rl0 @ 16.08.2006. 19:53 ] @
Ispricavam se,znam da sam malo dosadan,al imam jos jedan retardirano uberglup problem,
koji mi pije zivce.
Imam neku while petlju,koja izgleda ovak:
while(true){
string nekistring;
int lozinka;
getline(cin,nekistring);
cin>>lozinka;
}
prvi put kad petlja krene sve se normalno unese,i petlja krece ispocetka,ali problem
je u tome sto ona kao da ignorira ove izjave cin i getline,znaci preskace ih kao da ne postoje,
nije mi jasno zasto,pa fala na odgovorima,necu vise smetat,poz
[ icobh @ 16.08.2006. 20:06 ] @
Nisam znao da se u C++ može ovako deklarisati string promjenjljiva, a ovaj true se upošte ne ažurira u tvojoj petlji, a i ovo stalno deklarisanje promjenjljivih će da pojede memoriju ako se radi o dugačkoj petlji, tj. sa mnogo iteracija...
[ k4rl0 @ 16.08.2006. 23:18 ] @
Ima klasa string koja to omogucava :)
Al isto je i kad je deklaracija izvan petlje,stvarno nemam pojma..
[ icobh @ 17.08.2006. 09:53 ] @
Pošto C++ slabo poznajem, pa reko da ne ispadnem glup ali šta ti znači:
Code:
while(true)
{
...
}


Šta ti je ovo true, je li to u C++ postoji logički tip podataka, a i da postoji, tvoja petlja bukvalno glasi: vrti dok je tačno, a šta je to tačno?
[ itf @ 17.08.2006. 10:00 ] @
Općenito, sve uvjetne naredbe i petlje rade sa logičkim izrazima. Ako je logički izraz istina (sve različito od nule) onda će se naredba poslije uvjeta ili petlje izvršiti. Ako je izraz laž (nula) onda se neće izvršiti. Obično se za istinu koristi vrijednost 1, no u C-u istina je sve različito od nule, pa to može biti 1, -1, 10... ili bilo što osim nule, dok laž ima samo vrijednost 0.

U primjeru koji si naveo se doslovice kaže... "Sve dok je istina..." tj. tvoja petlja je ekvivalentna:

while (true != 0) ... // sve dok je istina
[ k4rl0 @ 17.08.2006. 10:48 ] @
Isitna,ona se beskonacno ponavlja,ali nije stvar u tome,nego je problem
to sto samo prvi put primi ulazne vrijednosti i u sljedecem krugu petlje
se ignoriraju unosi.(Ne daje mogucnost da se upisu podaci.)
Ista stvar se dogada i u slijedecem:
//.....
main()
{
string nekistring;
int i;
getline(cin,nekistring);
cin>>i;
main();
}


Ovo ponavlja unos beskonacno puta,ali vec nakon prvog puta vracanja na pocetak
funkcije main() getline i cin se ignoriraju i to je problem,ne razumijem zasto..
[ itf @ 17.08.2006. 11:13 ] @
Ovo sada nisu petlje, već rekurzije... Pokušaj ovo dodati umjesto svog koda za učitavanje:

Code:
char nekistring[100];
int i;

cin >> nekistring;
cin >> i;

[ icobh @ 17.08.2006. 11:47 ] @
Moraš prvo deklarisati promjenjljivu true i dodjeliti joj neku vrijednost !=0, npr. 1 izvan te petlje i tek tada tvoj while ulazi u beskonačan ciklus. Evo kako to izgleda u C-u:
Code:
#include <stdio.h>

int main()
{
    int true=1;
    while(true)
    {
        char nekistring[50];
        int lozinka;
        scanf("%s",nekistring);
        scanf("%d",lozinka);
        }
    return 0;
}
[ itf @ 17.08.2006. 12:03 ] @
Nije potrebna deklaracija varijable. Može se napisati i samo

while (1) ...
[ #Ninja# @ 17.08.2006. 12:12 ] @
Citat:
icobh: Moraš prvo deklarisati promjenjljivu true i dodjeliti joj neku vrijednost !=0, npr. 1 izvan te petlje i tek tada tvoj while ulazi u beskonačan ciklus. Evo kako to izgleda u C-u:


Ne mora u C++. U C++ true i false su varijable tipa bool.
[ k4rl0 @ 17.08.2006. 12:19 ] @
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int main()
{
while(1)
{
string nekistring;
int lozinka;
cout<<"Unesite ime:";
cin>>nekistring;
cout<<"Unesite lozinku:";
cin>>lozinka;
}
return 0;
}

Ovo tvoje radi,ali radi i ovaj moj primjer,ali problem nastaje kada nekistring unosim
sa getlineom,a ne sa cinom.
S obzirom da ovaj nekistring moze imat razmak(npr. ime:ivica_ivić),nemoguce ga je
unjet sa cinom,nego moram koristit getline,ali kad koristim getline,dolazi do kolapsa.
Znaci trebam unjet nekak cjeli red sa cinom..
[ itf @ 17.08.2006. 12:24 ] @
Mislim da getline prima char* a ne string pa da bi tu bio problem. Pogledaj u helpu točnu sintaksu te funkcije. Na poslu sam pa nemam nikakav IDE ovdje...

Koliko se sjećam možda bi i ovo moglo...:

cin.getline(.....)
[ k4rl0 @ 17.08.2006. 13:01 ] @
Prima i string,funkcija getline,ali samo prvi put izvrsenja petlje,kad dode u drugi
krug petlje potpuno se ignorira i onda dolazi do kolapsa u programu...
cin.getline() ne moze uzet string,a steta mi je sad cijeli program pisat ispocetka..
(Ne ovaj,ovo je samo jednostavan primjer mog problema,imam veci projekt)
[ k4rl0 @ 17.08.2006. 17:11 ] @
//main.cpp
Code:
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<vector>
using namespace std;

main()
{
int i=0,stanje=0,counter=0,count=0,lozinka,poz=0;
vector<int>lozinke;
vector<string>korisnicis ;
vector<string>lozinkes;
string stanjes,buff,korisnik;


ifstream koristxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\korisnici.txt");
ifstream stantxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\stanjebankomata.txt");
ifstream loztxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\lozinke.txt");


while(getline(koristxt,buff))
korisnicis.push_back(buff);

while(getline(loztxt,buff)) {
lozinkes.push_back(buff);
lozinke.push_back(atoi(buff.c_str()));
}

getline(stantxt,stanjes);
stanje=atoi(stanjes.c_str());

while(1){
system("CLS");
cout<<"Dobro dosli na bankomat!"<<endl;
cout<<"Unesite korisnicko ime:"<<endl;
getline(cin,korisnik);

for(i=0;i<korisnicis.size();i++)
{
if(korisnik==korisnicis[i])
{
counter++;
poz=i;
}

cout<<"Unesite PIN:"<<endl;
cin>>lozinka;

if((lozinka==lozinke[poz])&&(counter!=0)){
      cout<<"Uspjesno ste se logirali na bankovni racun."<<endl;
      break;
}
else
{cout<<"Korisnicko ime ili PIN su pogresni,pokusajte ponovo.\n\n";
}

}
cout<<"Odaberite jednu od slijedecih opcija:\n"<<endl;
}
system("PAUSE");
}


//lozinke.txt
Code:
12345
78910
11224


//stanjebankomata.txt
Code:
700000


//korisnici.txt
Code:
Pera Peric
Matko Jozic
Ivan Kluka Luka Paljuka
Ivica Jozic


Evo koda i fajlova iz kojih citam,probajte kompajlirat,pa ako neko zna ili uspije,puno hvala..
Naravno program trebam nastaviti,al trenutno ne mogu jer sam tu zapeo
Poz
[ pcaca @ 17.08.2006. 21:16 ] @
U pravu si ovaj kod ne radi kako treba:
Code:

while (true) {
    cout << "Unesi korisnik: ";
    string nekistring;
    getline(cin, nekistring);
    cout << "Unesi lozinku: ";
    int lozinka;
    cin >> lozinka;
}

Ali kada tome dodas cin.ignore() posle ucitavanju lozinke onda radi :)
Code:

while (true) {
    cout << "Unesi korisnik: ";
    string nekistring;
    getline(cin, nekistring);
    cout << "Unesi lozinku: ";
    int lozinka;
    cin >> lozinka;
    cin.ignore();
}

cin.ignore() funkcija ignorira jedan karakter iz buffer-a. Problem je u tome sto getline funkcija kada naigje na '\n' karakter prekida sa ucitavanjem, a u slucaju kada citas lozinku kada pritsens "Enter" u buffer se dodaje jedan '\n' koji ostaje u njega.

Drugo moguce resenje bi bilo da i lozinka bude string pa da onda sve citas sa getline(), a po potrebi lozinku posle konvertujes u int.
Code:

while (true) {
    cout << "Unesi korisnik: ";
    string nekistring;
    getline(cin, nekistring);
    cout << "Unesi lozinku: ";
    string lozinka;
    getline(cin, lozinka);
}
[ k4rl0 @ 17.08.2006. 23:25 ] @
Hm...Zanimljivo,ali ne,i u jednom i u drugom slucaju program krene ispocetka,ali ovaj put od unosa lozinke,
ne trazi da se unese korisnik
[ pcaca @ 18.08.2006. 00:59 ] @
Citat:
k4rl0: Hm...Zanimljivo,ali ne,i u jednom i u drugom slucaju program krene ispocetka,ali ovaj put od unosa lozinke,
ne trazi da se unese korisnik :O

Jesi li siguran da ne radi ovaj kod?
Code:

while (true) {
    cout << "Unesi korisnik: ";
    string nekistring;
    getline(cin, nekistring);
    cout << "Unesi lozinku: ";
    int lozinka;
    cin >> lozinka;
    cin.ignore();
}

Kod mene radi kako treba, evo jos jednom sam testirao i sve je OK. Svaki put trazi da se unese korisnik i lozinka. Neznam sta zelis reci stime da u drugom slucaju program krene sa unosa lozinke. Kod mene kod svakog prolaza kroz loop trazi i korisnik i lozinku.

Jel hoces reci da se kod sa cin.ignore() i bez cin.ignore() kod tebe ponasa isto?
[ k4rl0 @ 18.08.2006. 11:08 ] @
Ne potpuno isto,ali niti normalno,probaj kod:

Code:

#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<vector>
using namespace std;

main()
{
int i=0,stanje=0,counter=0,count=0,poz=0,lozinka;
vector<int>lozinke;
vector<string>korisnicis ;
vector<string>lozinkes;
string stanjes,buff,korisnik;


ifstream koristxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\korisnici.txt");
ifstream stantxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\stanjebankomata.txt");
ifstream loztxt("C:\\Documents and Settings\\Karlo\\My Documents\\Programiranje\\C i C++\\bankomat\\lozinke.txt");


while(getline(koristxt,buff))
korisnicis.push_back(buff);

while(getline(loztxt,buff)) {
lozinkes.push_back(buff);
lozinke.push_back(atoi(buff.c_str()));
}

getline(stantxt,stanjes);
stanje=atoi(stanjes.c_str());

while(true){
system("CLS");
cout<<"Dobro dosli na bankomat!"<<endl;
cout<<"Unesite korisnicko ime:"<<endl;
getline(cin,korisnik);

for(i=0;i<korisnicis.size();i++)
{
if(korisnik==korisnicis[i])
{
counter++;
poz=i;
}

cout<<"Unesite PIN:"<<endl;
cin>>lozinka;
cin.ignore();

if((lozinka==lozinke[poz])&&(counter!=0)){
      cout<<"Uspjesno ste se logirali na bankovni racun."<<endl;
      break;
}
else
{cout<<"Korisnicko ime ili PIN su pogresni,pokusajte ponovo.\n\n";
}}

cout<<"Odaberite jednu od slijedecih opcija:\n"<<endl;
}
system("PAUSE");
}


Fala kaj imas zivaca sa time se zajebat
[ pcaca @ 18.08.2006. 12:52 ] @
Malo sam sredio kod jer nemogu raditi sa takav kod. I koliko vidim sve radi normalno ne vidim u cemu je problem. Najbolje pojasni gde ti se javlja problem. Ako mislis na to da kada uneses pogresni korisnik i/ili lozinku i po drugi put ne pita za korisnika nego samo za lozinku, onda problem je u tome sto kada su pogresni ne izlazis iz for loop.

Kada koristis fstream prvo ih testiraj dali su OK, pred da pocnes citati iz njih.
Code:

#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<vector>

using namespace std;

int main()
{
    int i = 0, stanje = 0 ,counter = 0,
        count = 0, poz = 0, lozinka;
    vector<int> lozinke;
    vector<string> korisnicis ;
    vector<string> lozinkes;
    string stanjes, buff, korisnik;

    //promenio sam put do datoteke
    ifstream koristxt("C:\\Documents and Settings\\user\\My Documents\\korisnici.txt");
    ifstream stantxt("C:\\Documents and Settings\\user\\My Documents\\stanjebankomata.txt");
    ifstream loztxt("C:\\Documents and Settings\\user\\My Documents\\lozinke.txt");


    while(getline(koristxt, buff))
        korisnicis.push_back(buff);

    while(getline(loztxt, buff)) {
        lozinkes.push_back(buff);
        lozinke.push_back(atoi(buff.c_str()));
    }

    getline(stantxt, stanjes);
    stanje = atoi(stanjes.c_str());

    while(true) {
        system("CLS");
        cout << "Dobro dosli na bankomat!" << endl;
        cout << "Unesite korisnicko ime: " << endl;
        getline(cin, korisnik);

        for(i = 0; i < korisnicis.size(); i++) {
            if(korisnik == korisnicis[i]) {
                counter++;
                poz = i;
            }

            cout << "Unesite PIN: " << endl;
            cin >> lozinka;
            cin.ignore();

            if((lozinka == lozinke[poz]) && (counter != 0)) {
                  cout << "Uspjesno ste se logirali na bankovni racun." << endl;
                  break;
            }
            else
                cout << "Korisnicko ime ili PIN su pogresni,pokusajte ponovo.\n\n"; //kada su pogresni ne izlazis iz for loop-a i ne pitas za korisnik
        }

        cout << "Odaberite jednu od slijedecih opcija:\n" << endl;
    }

    system("PAUSE");
    return 0;
}
[ k4rl0 @ 18.08.2006. 13:23 ] @
Ma bravo majstore,fala,sve ok..
Samo sam stavil da poziva main funkciju ako su pogresni lozinka ili user name(na taj nacin sam izaso iz for petlje i
omogucio unos isponova i lozinke i user namea..)
Hvala na zivcima,pozdrav..
[ pcaca @ 18.08.2006. 14:23 ] @
Citat:
k4rl0: Ma bravo majstore,fala,sve ok..
Samo sam stavil da poziva main funkciju ako su pogresni lozinka ili user name(na taj nacin sam izaso iz for petlje i
omogucio unos isponova i lozinke i user namea..)
Hvala na zivcima,pozdrav.. :)

Drago mi je da sam ti pomogao :)
To ti nije dobro resenje da pozivas ponovo main funkciju, a mislim da ne bi radilo u svaku situaciju. Pravo resenje ti je da malo ranije zatvoris for loop.
Evo ovako malo sam ti sredio celi kod, nema potrebe da podatke o bankovnim racunima cuvas u dva formata strin i int, dovoljan ti je samo string. Izgleda da si prethodno programirao u Pascal-u, u C++ se ne praktikuje da se promenlive deklariraju na pocetak programa nego kad ti zatrebaju.
Code:

#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<vector>

using namespace std;

int main()
{
    ifstream koristxt("C:\\Documents and Settings\\user\\My Documents\\korisnici.txt");
    ifstream stantxt("C:\\Documents and Settings\\user\\My Documents\\stanjebankomata.txt");
    ifstream loztxt("C:\\Documents and Settings\\user\\My Documents\\lozinke.txt");

    string buff;
    vector<string> korisnici;
    while(getline(koristxt, buff))
        korisnici.push_back(buff);

    vector<string> lozinke; //lozinke cuvas kao string
    while(getline(loztxt, buff))
        lozinke.push_back(buff);

    int stanje; //stanje ti je int nema potrebe od string
    stantxt >> stanje; //direktno citas int iz fajla

    int counter = 0;
    size_t poz = 0;
    string korisnik, lozinka;
    while(true) {
        system("CLS");
        cout << "Dobro dosli na bankomat!" << endl;
        cout << "Unesite korisnicko ime:" << endl;
        getline(cin, korisnik);

        for(size_t i = 0; i < korisnici.size(); i++) {
            if(korisnik == korisnici[i]) {
                counter++;
                poz = i;
            }
        } //ovde si trebao zatvoriti for loop
        cout << "Unesite PIN:" << endl;
        cin >> lozinka;
        cin.ignore();

        if((lozinka == lozinke[poz]) && (counter != 0)) {
              cout << "Uspjesno ste se logirali na bankovni racun." << endl;
              break;
        }
        else
            cout << "Korisnicko ime ili PIN su pogresni,pokusajte ponovo.\n\n";

        cout << "Odaberite jednu od slijedecih opcija:\n" << endl;
    }

    system("PAUSE");
    return 0;
}

Ako zelis da ti lozinka (PIN) budu int. Onda za ucitavanje koristi.
Code:

vector<int> lozinke; //lozinke cuvas kao string
int l;
while(loztxt >> l)
    lozinke.push_back(l);

Najbolje resenje bi ti bilo da koristis map<string, string> ili map<string, int> za cuvanje racuna.
Code:

map<string, int> racuni; //gde ces cuvati i korisnike i lozinke
[ DjoleReject @ 22.08.2006. 17:34 ] @
cini mi se da ti je ona funkcija mogla raditi da si imao cin.getline, pa fflush, a na kraju petlje if (nesto) break. Inace, neko pomenu while(1), a ja bih samo da kazem da nema sustinske razlike sa while(true).
[ k4rl0 @ 06.09.2006. 20:31 ] @
Znam da je malo stara tema al mi je glupo da otvorim 100 tema..
Pa me zanima malo detaljniji odgovor na prvo pitanje..
Dakle ako se namjeravam bavit sa GameDev u C++(samo programiranjem,
ne i modeliranjem,nego samo programiranjem igre..),koje tocno
djelove moram znat??
Cuo sam da:
C++(sam jezik,OOP..)
STL
WinAPI
DirectX
3D engine
Kolko je od toga tocno,molim vas odgovor da znam kud da krenem slijedece..

->Pls bez odgovora da idem na GameDev forum jer je glupo da otvaram teme
->Pls bez odgovora tipa vec su ljudi pitali i da googlam

Hvala
[ NrmMyth @ 07.09.2006. 14:24 ] @
Ja sam uradio 2 igre samo sa poznavanjem C++ i SDL-a.
[ k4rl0 @ 07.09.2006. 14:41 ] @
A mozes pls sendat exe i kod ak nije komercijala?
[ NrmMyth @ 07.09.2006. 22:50 ] @
http://www.code-it.net/forum/attachments/InFlamesBall%5B33%5D.rar
Evo jedna koja mi je bila za seminarski prosle godine.
Kod bih morao potraziti jer nije u ovom raru.
[ k4rl0 @ 08.09.2006. 14:28 ] @
Odlicno svaka cast,jel bi mi mogao kod poslat,pls
[ NrmMyth @ 08.09.2006. 16:04 ] @
Evo ti samo kod.
Sretno ako se snadjes, danas se ni ja nebi kladio u to.

http://d.turboupload.com/d/965792/kod.rar.html
[ k4rl0 @ 08.09.2006. 16:29 ] @
Puno ti hvala,pozz..