Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Otsikkorivi

Sivun loppuun

Andu [23.05.2006 15:24:47]

#

Miten otsikkoriville (siis sille jossa näkyy ohjelman nimi ja ruksi josta ohjelma suljetaan) saisi esimerkiksi pelin pisteet jotka päivittyvät. Käytän C(++)aa ja SDLää.

Metabolix [23.05.2006 15:53:04]

#

SDL_WM_SetCaption("Moi", NULL);

Andu [23.05.2006 15:59:28]

#

Kääntäjä rupeaa valittamaan jos laittaa esimerkiksi:
SDL_WM_SetCaption("Pisteet: \d", pisteet, NULL);

Meitsi [23.05.2006 16:05:50]

#

Andu kirjoitti:

Kääntäjä rupeaa valittamaan jos laittaa esimerkiksi:
SDL_WM_SetCaption("Pisteet: \d", pisteet, NULL);

Tietenkin, koska funktio ottaa parametreiksi vain tekstin ja kuvakkeen.

EDIT: Muuttujan yhdistäminen char-tauluun on käsiteltynä putkan C-oppaassa. Lukaise sieltä standardikirjastoista kertova osa.

Megant [23.05.2006 16:09:02]

#

Käytä sprintf-funktiota, kuvaus löytyy vaikka täältä: http://www.cplusplus.com/ref/cstdio/sprintf.html
Sprintf on kuin printf, mutta sen ensimmäinen parametri on osoitin merkkitaulukkoon. (Ja se ei tulosta mitään näytölle)
Laitetaan nyt vaikka esimerkkiä:

char bufferi[50];
int muuttuja = 5;
char merkki = 'a';
sprintf(bufferi, "numero on %i ja merkki on %c", muuttuja, merkki);

Metabolix [23.05.2006 16:42:02]

#

Stringstreamilla säästyy ylivuotovaaralta.

SDL_WM_SetCaption(((ostringstream&)(ostringstream("Sinulla on jo ", ios::app) << pisteet << " pojoa.")).str().c_str(), NULL);

Vastaava kauniimmin:

ostringstream ost;
ost << "Sinulla on jo " << pisteet << " pojoa.";
SDL_WM_SetCaption(ost.str().c_str(), NULL);

Blaze [23.05.2006 18:28:45]

#

Megant kirjoitti:

Käytä sprintf-funktiota

Älä käytä.

man 3 printf kirjoitti:

BUGS
Because sprintf() and vsprintf() assume an arbitrarily long string,
callers must be careful not to overflow the actual space; this is often
impossible to assure. Note that the length of the strings produced is
locale-dependent and difficult to predict. Use snprintf() and
vsnprintf() instead (or asprintf() and vasprintf).

Andu [24.05.2006 17:02:40]

#

Pitääkö tuossa:

ostringstream ost;
ost << "Sinulla on jo " << pisteet << " pojoa.";
SDL_WM_SetCaption(ost.str().c_str(), NULL);

tai tuossa:

SDL_WM_SetCaption(((ostringstream&)(ostringstream("Sinulla on jo ", ios::app) << pisteet << " pojoa.")).str().c_str(), NULL);

laittaa niihin includeihin joku? En tiedä paljoa C++an includeista, koska olen ohjelmoinut enimmäkseen Cllä.

zorm [24.05.2006 18:51:53]

#

#include <sstream>

sieltä tulee.
Tuon käyttöön pitää myös includeta iostream ja ottaa käyttöön tuo ostringstream.
eli kokonaisuudessaan koodin alkuun:

#include <iostream>
#include <sstream>

using::ostringstream;

Metabolix [25.05.2006 17:35:04]

#

zorm, mitä kummaa? Eihän tuo "using::ostringstream;" edes mene kääntäjästä läpi, ja mihin iostreamia muka tarvitaan?

#include <sstream>
using std::ostringstream;

Andu [25.05.2006 17:55:54]

#

Kiitoksia avusta.

zorm [25.05.2006 20:56:40]

#

Oho... meni aivot vähän sekaisin kun tuota viestiä kirjoittelin mutta tuota sinun antamaa korjausta kuitenkin tarkoitin. :)

Edit: siis eikö std -nimiavaruuden osien käyttämiseen tarvitsekkaan includea iostreamia? Minä ainakin olen elänyt siinä harhaluulossa mutta hyvä kun sekin tuli korjattua. :)

Grusifix [26.05.2006 22:09:25]

#

zorm: nimiavaruudet ovat avoimia, joten niitä voi esitellä useassa headerissa. Muuten tuo std-nimiavaruus olisi mahdoton toteuttaa nykyisessä muodossaan (jaettuna useaan moduuliin).

zorm [28.05.2006 20:14:10]

#

Ok! Kiitos tuosta tiedosta, Grusifix. :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta