Forum » Programiranje » [C++] vprašanja
[C++] vprašanja
Mmm'Aah ::
Torej hočeš DOS prevajalnik za C++... (MS Visual C++ je že sam prevajalnik in IDE in svašta zraven). Po-google-aj za "DOS C++ compiler", te bo kr obsul z zadetki.
Bojevnik ::
switch(ch) { case 'a': {cout<<'1';} case 'b': {cout<<'2';} case 'c': {cout<<'3';} case 'č': {cout<<'4';} case 'd': {cout<<'5';} case 'e': {cout<<'6';} case 'f': {cout<<'7';} case 'g': {cout<<'8';} case 'h': {cout<<'9';} case 'i': {cout<<'0';} default : {} }
A je tuki kej narobe, ker ko naprimer vnesem a, mi izpiše 1234567890, ce c pa 34567890 itd..., uporabljam Dev-C++ 5 beta
Zgodovina sprememb…
- spremenilo: Bojevnik ()
Quikee ::
manjkajo ti break; v vsakem case
recimo:
case 'a':
...
break;
case 'b':
...
break;
V nasprotnem primeru ce ni break; ti kr nadaljuje v druge case-e.
recimo:
case 'a':
...
break;
case 'b':
...
break;
V nasprotnem primeru ce ni break; ti kr nadaljuje v druge case-e.
Gundolf ::
Hmm, jaz ponavadi miško premikam z roko, tako da ti ne znam pomagat tu. Podnapis: Nimam pojma kaj sprašuješ.
Zgodovina sprememb…
- spremenil: Gundolf ()
CCfly ::
Nasvet si že dobil in sicer uporabi SDL, Win32, Xlib, ... Poleg tega te naprošam, da ne zastavljaš enakih vprašanj v treh različnih temah.
"My goodness, we forgot generics!" -- Danny Kalev
Senitel ::
Itak dobiš WM_MOUSEMOVE windows message, ko se miš premakne, ni treba kaj dosti komplicirat s tem.
iNN ::
Zivijo!
Problem: Potegnil sem si Razvijalno okolje Dev c++, v soli delamo v Borlandu, in ko sem hotel doma skompajlat source k sem ga napisal v soli (igrica vislice), in ni delovalo :o, nato sem nahitro napisal se en programcek k ti izpise "hello world" in stvar je delovala. Mislim da je to stvar prevajalnika. Kaj je resitev? Prosim za pomoc.
aja btw, v soli so vislice delovale!!!
Problem: Potegnil sem si Razvijalno okolje Dev c++, v soli delamo v Borlandu, in ko sem hotel doma skompajlat source k sem ga napisal v soli (igrica vislice), in ni delovalo :o, nato sem nahitro napisal se en programcek k ti izpise "hello world" in stvar je delovala. Mislim da je to stvar prevajalnika. Kaj je resitev? Prosim za pomoc.
aja btw, v soli so vislice delovale!!!
==
Gundolf ::
Lažje bi bilo, če bi povedal kaj ni delovalo (prevajanje / linkanje - točen error + po malo kode ali izvajanje). Lahko da si pisal nekompatibilno kodo, lahko da nisi pravilno nastavil dev++ a ali pa kaj čisto tretjega.
iNN ::
Ja torej, evo programcek ki dela v borlandu, tukaj pa ne dela, aja kot sem ze napisal je problem v kompajlanju
klik
Tocno mi oznaci error pri stavku, ki je cetrti po vrsti navzdol od maina, torej cout (izhodni tok) "vnesi besedo in pritisni SPACE ... tukaj, torej v cem je lahko problem?
klik
Tocno mi oznaci error pri stavku, ki je cetrti po vrsti navzdol od maina, torej cout (izhodni tok) "vnesi besedo in pritisni SPACE ... tukaj, torej v cem je lahko problem?
==
OwcA ::
Kaksno napako pa dobis?
Verjetno je težava v tem, da ne razrešuješ imenskih prostorov. cout je v std.
Lepo je tudi, če vsako pisanje na ostream zaključiš z std::endl, funkciji main določiš tip (int) in na koncu vrneš 0.
Verjetno je težava v tem, da ne razrešuješ imenskih prostorov. cout je v std.
Lepo je tudi, če vsako pisanje na ostream zaključiš z std::endl, funkciji main določiš tip (int) in na koncu vrneš 0.
Otroška radovednost - gonilo napredka.
kihc ::
Poleg tega je problem da če se ne motim funkcija gotoXY() deluje samo v borlandovih compilerjih.
x
iNN ::
heh sej me je kr sram napisat, ampak useen. :), v soli smo imel lansko leto prfoksa k se sam ni znal dobr c++ ... pa je nas ucil , in je reku da nima veze ce so knjiznice (primer: iostream) z .h oz brez koncnice .h, torej tukaj so bile brez :) Ko sem jih sedaj dodal, program deluje =)
Aja, kaj je sploh fora k koncnici, oz zakaj borland prepozna knjiznice brez koncnice, dev-c++ pa ne?
Aja, kaj je sploh fora k koncnici, oz zakaj borland prepozna knjiznice brez koncnice, dev-c++ pa ne?
==
Zgodovina sprememb…
- spremenilo: iNN ()
iNN ::
...da ne razrešuješ imenskih prostorov. cout je v std.....
...na ostream zaključiš z std::endl...
Mi lahko tole malo bolj razlozis ?
...na ostream zaključiš z std::endl...
Mi lahko tole malo bolj razlozis ?
==
iNN ::
Glede tistega prej z knjiznicami, ce imam iostream.h mi normalno skompajla ... ce imam samo iostream mi oznac prvi cout in tako naprej.
==
Gundolf ::
iostream.h je zastarelo. iostream je novo. Borland ima očitno neke svoje pojme na tem področju ampak če uporabljaš iostream (brez končnice) potem nimaš cout ampak std::cout. Oziroma na začetku napišeš using namespace std pa bo isto. V bistvu si imel ti napačno kodo, ki jo je borland vseeno sprejel. Zaradi takih stvari se potem folk čisto pravično pritožuje čez C++. Take prfoxe pa tud, khmm, raje ne bom rekel kaj. Ampak čisto tipično za naš šolski sistem.
fx ::
Ponovno sem se vrnil k RSA algoritmu. Samo imam en mali problemček.
e*d = 1(mod (p-1)*(q-1)), kako naj obravnavam mod funkcijo ko želim izračunati d. Želim e spravit na desno stran, ker c++ verjetno ne ve tako računat, kako je napisana formula.
Lp,
e*d = 1(mod (p-1)*(q-1)), kako naj obravnavam mod funkcijo ko želim izračunati d. Želim e spravit na desno stran, ker c++ verjetno ne ve tako računat, kako je napisana formula.
Lp,
OwcA ::
Trotel ziher način je, da daš vse kar je zdaj na desni v oklepaj in potem deliš z e.
Otroška radovednost - gonilo napredka.
Gundolf ::
No ne glih
Najbolje da si najdeš kje napisan dejanski algoritem za RSA (psevdokoda), ker tole formulo je treba še močno premetat naokol, preden rata algoritem.
Edit: Recimo, na prva dva pogleda zelo lepo razložen algoritem.
Najbolje da si najdeš kje napisan dejanski algoritem za RSA (psevdokoda), ker tole formulo je treba še močno premetat naokol, preden rata algoritem.
Edit: Recimo, na prva dva pogleda zelo lepo razložen algoritem.
Zgodovina sprememb…
- spremenil: Gundolf ()
fx ::
Gundolf hvala za link.
D se lahko izračuna na ta način
d = (((p-1)*(q-1)+1)/e)
V obeh primerih bo prišel isti rezulat. Ta zadnji pa je tudi preprost za račuanje.
Moje ugotovitv je da za pravilno delovanje RSA algoritma je da sta p in q praštevili in da je e med 1 in (p-1)*(q-1) in morata imeti e in (p-1)*(q-1) največji skupni deljitel (GCD) 1.
Lp,
D se lahko izračuna na ta način
d = (((p-1)*(q-1)+1)/e)
V obeh primerih bo prišel isti rezulat. Ta zadnji pa je tudi preprost za račuanje.
Moje ugotovitv je da za pravilno delovanje RSA algoritma je da sta p in q praštevili in da je e med 1 in (p-1)*(q-1) in morata imeti e in (p-1)*(q-1) največji skupni deljitel (GCD) 1.
Lp,
Zgodovina sprememb…
- spremenil: fx ()
Gundolf ::
fx, takole na pamet ne bi rekel, da je tvoja formula pravilna. Ne trdim da ni, ampak do sedaj sem za izračun d vedno videl le uporabo razširjenega Evklidovega algoritma. Po moje sploh ni nujno, da ti ta formula vrne celo število.
Če bi bila ta formula pravilna, potem ne vem zakaj za vraga bi se kdo matral z evklidom.
Če bi bila ta formula pravilna, potem ne vem zakaj za vraga bi se kdo matral z evklidom.
fx ::
Gundolf samo moj program dobro del, ker na tem linku mi ven isto vse vrže kot moj program. Pa še p,q in e moraš taki najt, ker ni vsaka številka dobra.
Lp,
Lp,
fx ::
RSA sem spravil pod streho (upama vsaj). Sedaj pa k naslednjemu koraku, naredit komunikacijo server/odjemalec preko TCP ali UDP. Zanima me če je kaki .h pod ANSI za moj primer?.
Ali moram sam napisati ali copy&past.
Lp,
Ali moram sam napisati ali copy&past.
Lp,
Zgodovina sprememb…
- spremenil: fx ()
fx ::
Vse sem našo, sedaj me samo nekaj zanima kako dva chara take oblike
Lp,
char *Name = new char[128];spravim v enega? samo mora biti take oblike.
Lp,
fx ::
#include <cstdlib> #include <string> #include <iostream> char *Construct(char *Name = new char[30] , char *Text = new char[256]) { char *assistant; system("cls"); assistant = "["; std::cout << assistant << std::endl; strcat(assistant, Name); //zapre program std::cout << assistant << std::endl; strcat(assistant, "] "); std::cout << assistant << std::endl; strcat(assistant, Text); std::cout << assistant << std::endl; return assistant; } int main() { char *Name = new char[30]; char *SendText = new char[256]; std::cout << "Your name : "; std::cin.getline(Name, 30, '\n'); while(true) { std::cout << "[" << Name << "] "; std::cin.getline(SendText, 256 , '\n'); if(strcmp(SendText, "/exit") == 0) return 0; SendText = Construct(Name,SendText); delete[] SendText; } return 0; }
Kaj sem narobe naredil, da mi ga zapre
Lp,
Gundolf ::
Nisi alociral pomnilnika zanjga.
Kaj se zanalašč mučiš s char* in iz principa nočeš uporabiti stringov? Ker pretvorba iz std::string v const char* je namreč povsem enostavna (če v kakšni funkciji od kake knjižnjice, ki jo uporabljaš, rabiš slučajno const char*).
Kaj se zanalašč mučiš s char* in iz principa nočeš uporabiti stringov? Ker pretvorba iz std::string v const char* je namreč povsem enostavna (če v kakšni funkciji od kake knjižnjice, ki jo uporabljaš, rabiš slučajno const char*).
fx ::
#include <cstdlib> #include <string> #include <iostream> int main() { std::string Name; std::string Text; std::cout << "Your nick : "; std::cin >> Name; Name = "[" + Name + "] "; system("CLS"); while(true) { std::cout << Name; std::cin >> Text; if(Text == "/exit") return 0; Text = Name + Text; char* SendText = const_cast<char*> (Text.c_str()); std::cout << SendText << std::endl; } return 0; }
To je to. Hvala Gundolf za namig. Se mi pozna da nisem dve leti C++ povohal.
CCfly ::
Text = Name + Text; char* SendText = const_cast<char*> (Text.c_str()); std::cout << SendText << std::end // --- poof std::cout << Name + Text << std::endl;
"My goodness, we forgot generics!" -- Danny Kalev
fx ::
CCfly vem, ampak ta vrstice bo šla ven in bi prišla druga, katera pa bo na server oz. client poslal besedilo.
EDIT:
Za knjižnico kam bom poslal SendText pa potrebujem char*.
Lp,
EDIT:
Za knjižnico kam bom poslal SendText pa potrebujem char*.
Lp,
Zgodovina sprememb…
- spremenil: fx ()
fx ::
#include <cstdlib> #include <string> #include <iostream> int main() { std::string Name; std::string Text; std::cout << "Your nick : "; std::cin >> Name; Name = "[" + Name + "] "; system("CLS"); while(true) { std::cout << Name; std::getline (std::cin,Text); if(Text == "/exit") return 0; else std::cout << Name + Text << std::endl; } return 0; }
Zakaj mi program to naredi (jaz želim, da samo enega izpiše Fx):
Your nick: Fx
[Fx] [Fx]
Lp,
fx ::
#pragma warning(disable:4786) #include <cstdlib> #include <cstring> #include <iostream> int main() { std::string Name; std::string Text; std::cout << "Tvoj vzdevek : "; std::cin >> Name; Name = "[" + Name + "] "; while(true) { std::getline(std::cin,Text,'\n'); if(Text == "/exit") return 0; if (Text == "/cls") system("CLS"); //pobrise zaslon v win in *nix std::cout << Name; } return 0; }
Program je kot mora biti. Dela na win in *nix OS.
Lp,
fx ::
Samo me nekaj zanima, a c++ ima kako funkcijo da omogoča da program leti v zanki tudi takrat ko vnašamo podatke? Ali bom moral uporabiti prekinitve?
Lp,
Lp,
Zgodovina sprememb…
- spremenil: fx ()
snow ::
Kaj pa niti (threadi)?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
fx ::
Funkcija :
potrebuje const char* uporabil sem to varjanto
Lp,
send(sd, CharText, (int)strlen(CharText) + 1, 0);
potrebuje const char* uporabil sem to varjanto
char* CharText = const_cast<char*> (StringText.c_str());in mi napako javi ko program zaženem, ko prevedem ne. Če naredim char CharText[256]; pa program normalno dela. Kaj narobe delam?
Lp,
OwcA ::
Saj že c_str() vrne const. Kar ti delaš je jemlješ stran const.
Otroška radovednost - gonilo napredka.
snow ::
Daj še potem uporabi StringText.size() namesto strlen
Se pravi:
Se pravi:
send(sd, StringText.c_str(), StringText.size() + 1, 0);
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
fx ::
Koda za server
V link morete še dodati povezavo za wsock32.lib.
Program pa je od tukaj, malo predelan.
EDIT: Vse kar sem prej napisal da ne dela sedaj dela, dela zato ker mi je ena spremenljivka nagajala oz. nisem bil pazljiv na njo.
[edit: kodo sem malo skrčil po širini - Gundolf]
Lp,
#include <iostream> #include <cstring> #include <cstdlib> #include <winsock.h> int main(int argc, char *argv[]) { system("cls"); system("color 0a"); SOCKET client_sd; /* Socket descriptor of client */ SOCKET server_sd; /* Socket descriptor of server */ char ReadText[256]; /* Data received from client */ unsigned short int port_number; /* Port number */ int a1, a2, a3, a4; /* Address numbers in xxx.xxx.xxx.xxx form */ struct sockaddr_in server; /* Information about the server */ struct sockaddr_in client; /* Information about the client */ int client_length; /* Length of the client information struct */ WSADATA w; /* Used for opening up Windows connection */ char client_address[32]; /* Address of the client */ std::string Name, Name_; std::string Text; /* Make sure there are three entries on the command line */ if (argc != 4) { std::cout << "Usage: simpcli [server address] [port number] [nickname]" << std::endl; system("pause"); exit(0); } /* Read the command line */ if (sscanf(argv[1], "%d.%d.%d.%d", &a1, &a2, &a3, &a4) != 4) { std::cout << "Error reading address in xxx.xxx.xxx.xxx form." << std::cout; system("pause"); exit(0); } if (sscanf(argv[2], "%u", &port_number) != 1) { std::cout << "Error reading port number." << std::endl; system("pause"); exit(0); } if (sscanf(argv[3], "%s", &Name_) != 1) { std::cout << "Error reading nickname." << std::endl; system("pause"); exit(0); } /* Open up the Windows connection. This is necessary before calling the other WinSock functions. */ if (WSAStartup(0x0101, &w) != 0) { std::cout << "Could not open windows connection." << std::endl; exit(0); } /* Open up a TCP/IP socket. */ server_sd = socket(AF_INET, SOCK_STREAM, 0); /* Make sure the socket was opened, and quit if not */ if (server_sd == INVALID_SOCKET) { fprintf(stderr, "Could not create socket.\n"); WSACleanup(); exit(0); } /* Set up the information in the server information structs */ /* Step 3a: Clear the memory in the server struct */ memset((void *)&server, '\0', sizeof(struct sockaddr_in)); /* Step 3b: Set the family of the server */ server.sin_family = AF_INET; /* Step 3c: Set the port */ server.sin_port = htons(port_number); /* Step 3d: Copy the server address into the struct */ server.sin_addr.S_un.S_un_b.s_b1 = (unsigned char)a1; server.sin_addr.S_un.S_un_b.s_b2 = (unsigned char)a2; server.sin_addr.S_un.S_un_b.s_b3 = (unsigned char)a3; server.sin_addr.S_un.S_un_b.s_b4 = (unsigned char)a4; /* Bind server address to socket */ if (bind(server_sd, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) == -1) { std::cout << "Could not bind address to socket." << std::endl; closesocket(server_sd); WSACleanup(); exit(0); } /* Print out some information */ std::cout << "Server running on " << argv[1] << std::endl; std::cout << "Press CTRL + C to terminate the server." << std::endl; /* Listen for connections */ listen(server_sd, 3); /* Step 6a: Accept the client */ client_length = (int)sizeof(struct sockaddr_in); if ((client_sd = accept(server_sd, (struct sockaddr *)&client, &client_length)) == -1) { std::cout << "Could not accept client." << std::endl; closesocket(server_sd); WSACleanup(); exit(0); } /* Step 6b: Get the client's address */ sprintf(client_address, "%d.%d.%d.%d", (unsigned char)client.sin_addr.S_un.S_un_b.s_b1, (unsigned char)client.sin_addr.S_un.S_un_b.s_b2, (unsigned char)client.sin_addr.S_un.S_un_b.s_b3, (unsigned char)client.sin_addr.S_un.S_un_b.s_b4); std::cout << "Client accepted on " << argv[1] << std::endl << "_________________________________________" << std::endl; /******************** STEP 6 *********************************/ /* Loop and wait for client to connect */ Name = argv[3]; Name = "[" + Name + "] "; while(1) { /************** STEP 7 ***********************************/ /* Get data from client until there's no more to get */ recv(client_sd, ReadText, 255, 0); std::cout << Text << std::endl; std::cout << Name; std::getline (std::cin,Text); Text = Name + Text; char* SendText = const_cast<char*> (Text.c_str()); /* Send data */ send(client_sd, SendText, (int)strlen(SendText) + 1, 0); } closesocket(client_sd); /* Close client socket */ return 0; } Koda za client #include <iostream> #include <cstring> #include <cstring> #include <cstdlib> #include <winsock.h> int main(int argc, char *argv[]) { system("cls"); system("color 0a"); SOCKET sd; /* The socket descriptor */ int a1, a2, a3, a4; /* The four numbers of the address in xxx.xxx.xxx.xxx form */ WSADATA w; /* Used to open the Windows connection */ struct sockaddr_in server; /* The server information */ unsigned short int port_number; /* The port to use */ char ReadText[256]; /* The response from the server */ std::string Name, Name_; std::string Text; /* Make sure there are three entries on the command line */ if (argc != 4) { std::cout << "Usage: simpcli [server address] [port number] [nickname]" << std::endl; system("pause"); exit(0); } /* Read the command line */ if (sscanf(argv[1], "%d.%d.%d.%d", &a1, &a2, &a3, &a4) != 4) { std::cout << "Error reading address in xxx.xxx.xxx.xxx form." << std::cout; system("pause"); exit(0); } if (sscanf(argv[2], "%u", &port_number) != 1) { std::cout << "Error reading port number." << std::endl; system("pause"); exit(0); } if (sscanf(argv[3], "%s", &Name_) != 1) { std::cout << "Error reading nickname." << std::endl; system("pause"); exit(0); } /* Open up the Windows connection. This is necessary before calling the other WinSock functions. */ if (WSAStartup(0x0101, &w) != 0) { std::cout << "Could not open windows connection." << std::endl; system("pause"); exit(0); } /* Open up a TCP/IP socket. */ sd = socket(AF_INET, SOCK_STREAM, 0); /* Make sure the socket was opened, and quit if not */ if (sd == INVALID_SOCKET) { std::cout << "Could not create socket." << std::endl; system("pause"); WSACleanup(); exit(0); } /* Set up the information in the server information structs */ /* Step 3a: Clear the memory in the server struct */ memset((void *)&server, '\0', sizeof(struct sockaddr_in)); /* Step 3b: Set the family of the server */ server.sin_family = AF_INET; /* Step 3c: Set the port */ server.sin_port = htons(port_number); /* Step 3d: Copy the server address into the struct */ server.sin_addr.S_un.S_un_b.s_b1 = (unsigned char)a1; server.sin_addr.S_un.S_un_b.s_b2 = (unsigned char)a2; server.sin_addr.S_un.S_un_b.s_b3 = (unsigned char)a3; server.sin_addr.S_un.S_un_b.s_b4 = (unsigned char)a4; /* Connect to the remote server */ if (connect(sd, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) != 0) { std::cout << "Could not connect to address " << argv[1] << " on port" << port_number << std::endl; closesocket(sd); WSACleanup(); system("pause"); exit(0); } /* We are now connected to the server, so we can send and receive data according to the protocol established */ /*************** STEP 5 ***************************************/ /* Transmit data to server */ std::cout << "_________________________________________" << std::endl; Name = argv[3]; Name = "[" + Name + "] "; do { std::cout << Name; std::getline (std::cin,Text); Text = Name + Text; /* Send data */ send(sd, Text.c_str(), Text.size() + 1, 0); /*************** STEP 6 ***************************************/ /* Receive data back from server */ recv(sd, ReadText, 255, 0); std::cout << ReadText << std::endl; } while(1); /**************** STEP 7 ************************************/ /* Close the socket */ closesocket(sd); /***************** STEP 8 *************************************/ /* Close the Windows connection */ WSACleanup(); return 0; }
V link morete še dodati povezavo za wsock32.lib.
Program pa je od tukaj, malo predelan.
EDIT: Vse kar sem prej napisal da ne dela sedaj dela, dela zato ker mi je ena spremenljivka nagajala oz. nisem bil pazljiv na njo.
[edit: kodo sem malo skrčil po širini - Gundolf]
Lp,
Zgodovina sprememb…
- spremenil: Gundolf ()
fx ::
Program sedaj pa de bo kot irc.
Snow a samo z niti, ker jaz sem mislo da bi s časvno prekinirvijo. A ima kdo kaki drugi predlog.
lp,
Snow a samo z niti, ker jaz sem mislo da bi s časvno prekinirvijo. A ima kdo kaki drugi predlog.
lp,
feithless ::
Kateri je najlažji (najhitrejši) način da iz stringa oblike "xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx" izluščim npr. tretjo besedo?
hvala
hvala
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Program za C++ jezikOddelek: Programska oprema | 2833 (1868) | popaj113 |
» | Kako bi naredil en ultra simple programček?Oddelek: Programiranje | 2305 (1586) | AtaStrumf |
» | C++ & XPOddelek: Programiranje | 1655 (1262) | Exilian |
» | C++ in pavzaOddelek: Programiranje | 1202 (963) | napsy |
» | c++ datotekeOddelek: Programiranje | 4013 (3502) | Vesoljc |