Forum » Programiranje » [C++] vprašanja
[C++] vprašanja
fx ::
Sem ugotovil.
Kako bi jaz naredil tako, kot naredi konzola, ko vpišem man ime_ukaza, da pobriše vsebino in jo ponovno prikaže ko pritisnem črko Q.
Ta program mi to naredi samo ne morem nič izpisati (razen, če pritisnem enter potem mi izpiše TEST, drugače ne)oz. vpisati v spremenljive.
Kako bi jaz naredil tako, kot naredi konzola, ko vpišem man ime_ukaza, da pobriše vsebino in jo ponovno prikaže ko pritisnem črko Q.
#include <iostream> #include <curses.h> int main() { int test; initscr(); noecho(); nodelay(strscr, 1); while(getch() != '\1x1b') { std::cout << "TEST"; std::cin >> test; std::cout << test; } endwin(); return 0; }
Ta program mi to naredi samo ne morem nič izpisati (razen, če pritisnem enter potem mi izpiše TEST, drugače ne)oz. vpisati v spremenljive.
fx ::
Kako bi jaz uporabil konzoline ukaze, ki bi imeli isti učinke, kot če bi jih sam vpisal v konzolo?
"UNIX & C++"
"UNIX & C++"
fx ::
CCfly hvala.
"UNIX & C++"
#include <stdlib.h> int system(const char *string); primer : system("pause");
"UNIX & C++"
OwcA ::
#include <cstdlib>
Otroška radovednost - gonilo napredka.
Zgodovina sprememb…
- spremenilo: OwcA ()
CCfly ::
Ja če že delaš v C++ uporabljaj zaglavne datoteke, ki ti C-jevske funkcije preslikajo v std namespace, kakor ti je napisal Owca.
"My goodness, we forgot generics!" -- Danny Kalev
fx ::
Ukaz v konzoli za pošiljanje na serijski port je:
Samo zdaj nevem kaj naj naredim s podatkom, ker bi ga rad spreminjal.
lp
"UNIX & C++"
echo -ne 'podatek' > /dev/ttyS0če se ne motim
system("echo -ne 'podatek' > /dev/ttyS0");
Samo zdaj nevem kaj naj naredim s podatkom, ker bi ga rad spreminjal.
lp
"UNIX & C++"
CCfly ::
Če želiš podatke spreminjati imaš pač neko polje znakov, ki pa potem podaš kot parameter funkciji system.
"My goodness, we forgot generics!" -- Danny Kalev
snow ::
Kam se daje spremenljivke v win32 api programu?
Mamo winmain... pa pol on wndproc, ki procesira razne msgje... zdej globalne spremenljivke ne... jaz bi pa rad mel zadeve pač stalne.. npr neko spremenljivko v kateri hranim neko stanje, pol jo pa prek gumbov spreminjam. Sam static v wndproc funkciji mi tud niso nekaj preveč všeč?
Kak pa objektno pa ta win32api? Ideas, links?
Mamo winmain... pa pol on wndproc, ki procesira razne msgje... zdej globalne spremenljivke ne... jaz bi pa rad mel zadeve pač stalne.. npr neko spremenljivko v kateri hranim neko stanje, pol jo pa prek gumbov spreminjam. Sam static v wndproc funkciji mi tud niso nekaj preveč všeč?
Kak pa objektno pa ta win32api? Ideas, links?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Nerdor ::
snow. imamo ideas, glej klikni na legendarni Forgerjev tutorial. Tudi jest sem se od tod tega tutoriala učil programirat v windowsih!
Samo zapomni si nekaj, vse v win32 so strukture, enumeracije, konstante in funkcije v C-jeziku! V win32 api programirju NI objektov! Temu najbližje so strukture (kot objekt v C-ju, samo nimajo metod, samo spremenjivke! )! To imej v mislih, objekti so bili preveč nova zadeva, ko so še pacali win32 api, zato so struct in enum v čistem C-ju! Aja, odveč je rečt da Win32 api potem takem ni v C++. Skratka preberi si Forgerjev tutorial za boljše razumevanje!
Samo zapomni si nekaj, vse v win32 so strukture, enumeracije, konstante in funkcije v C-jeziku! V win32 api programirju NI objektov! Temu najbližje so strukture (kot objekt v C-ju, samo nimajo metod, samo spremenjivke! )! To imej v mislih, objekti so bili preveč nova zadeva, ko so še pacali win32 api, zato so struct in enum v čistem C-ju! Aja, odveč je rečt da Win32 api potem takem ni v C++. Skratka preberi si Forgerjev tutorial za boljše razumevanje!
... for lifetime!
Zgodovina sprememb…
- spremenil: Nerdor ()
OwcA ::
Čeprav nič ti ne preprečuje, da API klicov ne oblečeš v kaj bolj okusnega -- objektnega. V skrajni sili kar MFC.
Otroška radovednost - gonilo napredka.
Vesoljc ::
jah, recimo window wrapper zna biti kr hecno implmentirat.
@owca
ampak res v skrajni sili...
@owca
ampak res v skrajni sili...
Abnormal behavior of abnormal brain makes me normal...
snow ::
Ja, saj delam po tem Forgerju :)
Pa pol recimo se te spremenljivke/strukture kar globalno daje oziroma se jih zapakira v eno strukturo?
Tako kot ima narejeno zadevo tukaj za to animacijo žoge.
Pa pol recimo se te spremenljivke/strukture kar globalno daje oziroma se jih zapakira v eno strukturo?
Tako kot ima narejeno zadevo tukaj za to animacijo žoge.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
OwcA ::
Če boš ostal pri win32 API-ju, torej C, kar nameči vse v globalni imenski prostor. Na estetiki se ne bo poznalo.
Otroška radovednost - gonilo napredka.
Gundolf ::
Lahko pa uporabiš recimo wxWidgets. Sam sem se malo poigral z njimi in se mi zdijo kar fletni. Prijetno me je presenetilo, da se da uporabniški vmesnik spisati kar v XMLju. Je pa to popolnoma objektna knjižnjica, zelo pregledna in tudi prenosljiva. Edina pripomba ki jo imam je ta, da exe že po defaultu zasede skoraj 1M.
Gundolf ::
V bistvu ne poznam ker delam v winsih in se mi dozdeva da je tole linux fora. Si predstavljam, da ti statični build zlinka v executable tudi vse dinamične knjižnjice, ki jih uporabljaš. Imam prav? No, kaj za vraga sploh linkajo windows linkerji mi ni jasno, ker vsak hello world zasede skoraj 300k. Ampak static / dynamic tu ni prava rešitev. Mi je po svoje še bolj všeč če imaš le en velik exe kot pa majhen exe in eno tono velikih dlljev (ki jih tako ali tako nihče drug nima, tako da jih moraš distribuirat skupaj s programom).
Quikee ::
Ja staticni build ti zlinka vse potrebne DLL v exe. Drugace so DLL fajn.. ce uporabljas kake, ki so mnozicno uporabljeni tak kot recimo MFC, ki je ze prilozen Windows XP ( in vrjetno tudi starejsim Windowsem ). Drugace pa ce uporabljas kakasen neznan DLL pa je problem ker v taksnem primeru pa ga potem mores nonstop prilagat programu ali na kakasen drug nacin nakazat kak se ga dobi. =) Majo pa se DLL drugi namen.. in to je da jih lahko kadarkoli v programu nalozis v pomnilnik in iz pomnilnika sprostis, ko ga vec ne rabis.
Gundolf ::
Ja plugini s pomočjo DLLjev so kar v redu. Pa kakšen OpenGL32.dll je tudi zelo koristen. MFC pa verjetno morajo dodajati winsom (močno močno dvomim da je priložen starejših verzijam, že to da je priložen XPjem se mi sliši malo čudno), da bi spodbudili njegovo uporabo
Quikee ::
MFC je kar fajn za kaksne bolj enostavne programe... kolkor pa hoces naredit kaj bolj kompleksnega pa zraven lahko znoris in za eno bogo funkcijo, ki bi ze morala biti privzeto vkljucena moras podedovat celi control in si ga po svoje prilagodit kar pa po navadi vec ni "piece of cake". =)
Zdaj ne vem ce je prilozen tudi starejsim Windowsem.. ampak kljub temu ko si namescas razne programe na masino bo sigurno en med temi namestil tudi MFC DLL. Mislim da ga MS Office rabi in ti ga namesti ampak nisem ziher. =)
Zdaj ne vem ce je prilozen tudi starejsim Windowsem.. ampak kljub temu ko si namescas razne programe na masino bo sigurno en med temi namestil tudi MFC DLL. Mislim da ga MS Office rabi in ti ga namesti ampak nisem ziher. =)
fx ::
Torej je to to:
Če želim podatke pošiljati na serijska vraza s pomočjo konzole.
Če je kaj narobe, me obvestite, prosim lepo.
lp
"UNIX & C++"
#include <iostream> int main() { int ukaz; std::cin >> ukaz; system("echo 'ukaz' > /dev/ttyS0"); return 0; }
Če želim podatke pošiljati na serijska vraza s pomočjo konzole.
Če je kaj narobe, me obvestite, prosim lepo.
lp
"UNIX & C++"
fx ::
Kako v C++ naredim da imam dve okni, v prvo vnašam podatke, v drugem oknu se avtomatično prikažejo podatki v obliki grafa (OpenGL).
lp
lp
BigWhale ::
> Ja staticni build ti zlinka vse potrebne DLL v exe.
Hm, na tole nisem nic odgovoril... ;)
Ce nekaj linkas z -static, potem ti linker vzame staticno knjiznjico (.la) in jo zalima zraven exe datoteke. To je staticno linkanje. Ce pa linkas brez -static, potem se pa linkajo simboli in dinamicni linker ti ob izvajanju nalozi vse potrebne knjiznice.
Tako je to na Unix sistemih.
Hm, na tole nisem nic odgovoril... ;)
Ce nekaj linkas z -static, potem ti linker vzame staticno knjiznjico (.la) in jo zalima zraven exe datoteke. To je staticno linkanje. Ce pa linkas brez -static, potem se pa linkajo simboli in dinamicni linker ti ob izvajanju nalozi vse potrebne knjiznice.
Tako je to na Unix sistemih.
fx ::
Vse imam narejeno samo ta povezava mi manjka, pa program deluje. Ena možnost je branje iz datoteke. Sploh ne vem kaj bi iskal po stricu googlu.
lp
lp
fx ::
class Temperatura { public: void setTemp(float Celzija) { Temp = Celzija; } float getTemp() { return Temp; } private: float Temp; }; struct podatki { int address; //sifra podatka float data; //novi podatek }; void Beri_doc() { Temperatura Celzija[24]; podatki beri; int i = 0; std::fstream doc("test.dat", std::ios::in | std::ios::out); while(!doc.eof()) { i++; doc.seekp((i-1) * sizeof(podatki)); doc.read((char*)&beri, sizeof(podatki)); Celzija[i].setTemp(beri.data); } }
Kaj je narobe, da mi program ne želi podatke iz datoteke straniti v polje?
lp
OwcA ::
doc.read((char*)&beri, sizeof(podatki));
To ni zelo lepa rešitev in pogost izvor napak, saj zahteva, da kontroliraš poravnavo podatkov, kar dvomim, da počneš.
To ni zelo lepa rešitev in pogost izvor napak, saj zahteva, da kontroliraš poravnavo podatkov, kar dvomim, da počneš.
Otroška radovednost - gonilo napredka.
OwcA ::
Če drugega ne, prebereš int ter float posamično in ju potem zbašeš v beri. Glede na to, da tako uporabiš samo data, bi lahko branje int-a v celoti preskočil.
Otroška radovednost - gonilo napredka.
fx ::
Joj jaz uporabljam naključni dostop lahko pa bi zaporedni dostop. Bom probal z slednjim sedaj.
lp
lp
OwcA ::
Aja, še en bug imaš, ker pišeš Celzija[i] in ne Celzija[i-1]. Daj raje tist i++ na koncu bloka in lepo povsod uporabljaj i.
Otroška radovednost - gonilo napredka.
Gundolf ::
In ker bereš iz binarnega fajla dodaj med flage tam kjer odpreš fajla še std::ios::binary, drugače boš ob prvem številu ki bo enako 0 neprijetno presenečen - morda si že sedaj.
Aja, če pa ne bereš binarnih podatkov ampak imaš text fajl, potem pa uporabljaj
Aja, če pa ne bereš binarnih podatkov ampak imaš text fajl, potem pa uporabljaj
operator >>za branje.
fx ::
Ne, ker ta sistem deluje:
Obema hvala za pomoč in trud.
lp
#include <iostream> #include <fstream> struct oseba { float Data; }; int main() { const int VelPolja = 24; float Temp[VelPolja]; std::fstream osebe("osebe.dat", std::ios::in | std::ios::binary); oseba o; int i = 0; while(!osebe.eof()) { osebe.read((char*)&o, sizeof(o)); std::cout << o.Data << std::endl; Temp[i] = o.Data; i++; } std::cout << "-----------------" << std::endl; for(int i = 0; i < 24; i++) { std::cout << Temp[i] << std::endl; } system("PAUSE"); return 0; }
Obema hvala za pomoč in trud.
lp
fx ::
Prehitro vprašam:
lp
#include <stdio.h> #include <time.h> #include <iostream> int main() { char dateStr [9]; char timeStr [9]; _strdate( dateStr); printf( "The current date is %s \n", dateStr); _strtime( timeStr ); printf( "The current time is %s \n", timeStr); system("PAUSE"); return 0; }
lp
fx ::
To ne najdem:
Kako naredim, da mi bo bral datoteko z danajšnjim datumom, ne vem kako bi to skupaj spesno. Z string ni problema.
lp
char dateStr [9]; _strdate( dateStr); std::fstream osebe("data/dateStr.dat", std::ios::out | std:ios::binary /*|std::ios::app*/);
Kako naredim, da mi bo bral datoteko z danajšnjim datumom, ne vem kako bi to skupaj spesno. Z string ni problema.
lp
OwcA ::
Pa iz dateStr naredi std::string. Drugače imaš pa strcat() in podobne akrobacije.
Otroška radovednost - gonilo napredka.
fx ::
kako string spravim v char in obratno.
lp
std::string datum; char* ime_doc]; char dateStr [9]; _strdate( dateStr); datum = dateStr; datum[2] = '_'; datum[5] = '_'; datum = "data/" + datum + ".dat"; ime_doc = datum; std::fstream doc(ime_doc, std::ios::out | std::ios::binary /*|std::ios::app*/);
lp
Gundolf ::
Mislim da bi delalo takole (če primerno popraviš tvojo kodo, ki s jo napopal)
Na enostavno povedano c++ ne zna seštevati char*, zna pa seštevati stringe in stringe z char*. Zato mu moraš explicitno pretvoriti prvo spremenljivko v std::string, k njej pa bo potem znal prišteti tudi navadne char* (če zanemarim eno malenkost, da te ne bi zmedel, potem je tudi navadno besedilo znotraj narekovajev je tipa char*)
std::string datum("data/"); datum += dateStr; datum += ".dat"; //mislim pa da bi moralo delovati tudi na bolj eleganten način - takole: datum = std::string("data/") + dateStr + ".dat";
Na enostavno povedano c++ ne zna seštevati char*, zna pa seštevati stringe in stringe z char*. Zato mu moraš explicitno pretvoriti prvo spremenljivko v std::string, k njej pa bo potem znal prišteti tudi navadne char* (če zanemarim eno malenkost, da te ne bi zmedel, potem je tudi navadno besedilo znotraj narekovajev je tipa char*)
fx ::
Gundolf to eleganso sem imel tudi jaz samo, mi datum izipiše v obliki 28/05/05. Tega znaka / pa windows ne more prebaviti za ime datoteke. zato sem imel jaz vsem to
lp
datum[2] = '_'; datum[5] = '_';
lp
Zgodovina sprememb…
- spremenil: fx ()
Gundolf ::
fx, očitno ga slabo kličeš (saj to si o replace govoril?) - to je namreč metoda razreda string. Dva char pa lahko zlepiš v char[2] ali pa v string.
fx ::
char* datum; _strdate(datum); char* pot = "data/"; char* end = ".dat"; datum[2] = '_'; datum[5] = '_'; char* ime_doc = (pot, datum, end); std::cout << ime_doc << std::endl;
Deluje samo mi program izpiše .dat namsto tega data/29_05_05.dat. Kaj je narobe?
lp
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Program za C++ jezikOddelek: Programska oprema | 2862 (1897) | popaj113 |
» | Kako bi naredil en ultra simple programček?Oddelek: Programiranje | 2331 (1612) | AtaStrumf |
» | C++ & XPOddelek: Programiranje | 1680 (1287) | Exilian |
» | C++ in pavzaOddelek: Programiranje | 1225 (986) | napsy |
» | c++ datotekeOddelek: Programiranje | 4057 (3546) | Vesoljc |