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.
- 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));
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.
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 !
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ä.
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; }
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/
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; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.