Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c++/win luvun arpominen ja messagebox

Sivun loppuun

Meitsi [24.01.2004 13:27:56]

#

Miten c++/win ohjelmassa saa messageboxin tekstin sekaan laitettua arvotun luvun 1-6. Väsään "noppa" ohjelmaa, mutta tyssäsi siihen kun en saakkaan lukua näkymään. Löysin yhestä kirjasta tämmöisen funktion:

#include <cstdlib>

int satunnaisluku(int lkm)
{
  return static_cast<int>((lkm*static_cast<long>(rand()))/(RAND_MAX+1));
}

Mutta miten tolla arvotun luvun voi näyttää messageboxissa kun ei hyväksy muuttujaa tekstiksi.

cloudi [24.01.2004 14:29:24]

#

- tää ei kyl tee mitää messageboxia =) ku en oo c++:lla niit tehny ikinä...
(tää on visual 6:ssa)

#include <iostream.h>

#include <cstdlib>
#include <stdio.h>
#include <time.h>

const int MAX=6;

int satunnaisluku(int lkm)
{
	int luku;
	int paluu;
	bool sopiva;
   time_t t;
   srand(time(&t));
   for (int i=0;i<100;i++)
  {
    paluu=static_cast<int>((lkm*static_cast<long>(rand()))/(RAND_MAX+1));
   }

  return paluu;
}

main()
{
	cout<<satunnaisluku(MAX);

	return 0;
}

-mut jpilleril joskus harjoitellu
eli tää niinku asettas tekstikenttään luvun:
jTextField1.setText(String.valueOf(muuttuja));

Meitsi [24.01.2004 16:12:29]

#

Mutta miten ton saa messageboksiin tekstin perään?
Komento olis tämmöne:

MessageBox (NULL, "Noppa on heitetty. Sait luvun: " + satluku(6) , "Noppa", 0);

toi satluku on se sun funktio satunnaisluku, mä vaihdoi nimen.
kun toi vaan ottaa ton "noppa on heitetty... jutun alusta pois kirjaimia sen määrän minkä luvun sai (dokumentoimaton ominaisuus?!)
ja toi winin komento ei hyväksy tohon tekstin tilalle inttiä tai charia.

cloudi [24.01.2004 17:23:45]

#

en edelleenkää messagel, mut cout-tulosteella saan luvunkin tulemaan:

cout<< ( NULL, "Noppa on heitetty. Sait luvun: " )   <<  satunnaisluku(MAX) ;

-hei muuten miten c++:ssa päästää siihe message-hommaan? mitä pitäs valita aluksi (projectsista? application??)
mul on vaan sourcefile (cpp), et ei mitää ikkunoita tms hienooksia !

Dual [24.01.2004 21:41:52]

#

Sun pitää muuttaa se integer-muuttuja tekstiksi ja sit kopioida se muun tekstin sekaan.

char teksti[64];
char buffer[16];
memset(teksti, 0, 64);
memset(buffer, 0, 16);
int a = 1337;
itoa(a, buffer, 10);   // Toi 10 tarkoittaa että käytössä
                       // 10-järjestelmä
strcpy(teksti, "Noppa on heitetty. Sait luvun: ");
strcat(teksti, buffer);
MessageBox(NULL, teksti, "Noppa", MB_OK);

char-taulukon sijaan olisi kyllä asiallisempaa käyttää string-muuttujaa ja sen funktioita, mutta string-luokkaa ei
(vissiin) löydy ainakaan VC++ mukana tulevista headereistä.

Antti Laaksonen [25.01.2004 01:21:13]

#

Tässä on koodi, joka toimii ainakin Dev-C++:lla.

#include <stdio.h>   /* sprintf */
#include <stdlib.h>  /* srand, rand */
#include <windows.h> /* GetTickCount, MessageBox */

int main(void) {
    /* muuttujat arvotulle luvulle ja viestille */
    int arpa;
    char viesti[35];
    /* alustetaan satunnaislukugeneraattori */
    srand(GetTickCount());
    /* arvotaan luku väliltä 1 - 6 */
    arpa = (6 * rand() / RAND_MAX) + 1;
    /* yhdistetään arvottu luku merkkijonoon */
    sprintf(viesti, "Noppa on heitetty. Sait luvun: %i", arpa);
    /* näytetään viesti-ikkuna */
    MessageBox(0, viesti, "Noppa", 0);

    return 0;
}

Meitsi [29.01.2004 16:52:40]

#

Kiitti vinkeistä! Mun täytyy vielä optimoida (omia) koodejani ja kehitellä joku oma koodinpätkä tohon arpomiseen (enhän mä voi teidän koodeilla tehtyä ohjelmaa levittää)
EDIT: Joo toimii toi antinkin vinkki. Mä vähän muuttelin sitä antin koodia ja tein siitä funktion. Kiitosh!
EDIT:EDIT: Voitte käydä lataamassa nopan osoitteesta www.freewebs.com/square35/

tmunq [10.02.2004 09:39:22]

#

Tässä vielä parempi (käytännöllisempi) tapa tehdä asia.

#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>

int MsgBoxPrintf(HWND hwnd,UINT type,char *title,char *txt,...)
{
	char tmp[1024];
	va_list al;
	va_start(al,txt);
	_vsntprintf(tmp,1024,txt,al);
	va_end(al);

	return MessageBox(hwnd,tmp,title,type);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	srand(GetTickCount());
	MsgBoxPrintf(NULL,MB_OK,"MsgBoxPrintf","Arvottu luku = %d.",(int)(rand()%6+1));
	return 0;
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta