Tein tuossa jonkinlaista lotto ohjelmaa.
Tein tuon täysin oman muistini perusteella, ja ylläty yllätys, se meni läpi kääntäjästä. Nyt kuitenkin, kun avaan ohjelman(komentorivi ja pikakuvake) tulee "Ohjelma on suorittanut laittoman toiminnon, ja jne. jne."
Koodi on kyllä kesken eräinen, mutta ei pitäisi vaikuttaa mitenkään ja tässä se on:
#include <iostream> #include <stdlib.h> #include <time.h> #define ARVOTAAN 7 #define LUKUJA 37 using namespace std; int main() { int i, luvut[i], valinta, arvotut[i]; cout << "+------------------------+\n"; cout << "| LOTTO |\n"; cout << "| Lotto peli |\n"; cout << "| ---------------------- |\n"; cout << "| by -squid- |\n"; cout << "+------------------------+\n\n"; srand(time(0)); cout << "+------------------------+\n"; cout << "| VALIKKO |\n"; cout << "| (1) Pelaa |\n"; cout << "| |\n"; cout << "| (0) Lopeta |\n"; cout << "+------------------------+\n"; cin >> valinta; switch (valinta) { case 1: cout << "Kirjoita 7 numeroa, maximissaan 37, jokainen eri riville: \n"; for (i=0; i < 37; i++) { cin >> luvut[i]; } for (i=0; i < ARVOTAAN; i++) { arvotut[i] = rand() % 7; } for (i=0; i < ARVOTAAN; i++) { cout << luvut[i] << " "; cout << "\n"; } for (i=0; i < ARVOTAAN; i++) { cout << arvotut[i] << " "; } break; } cout << "\n\n\n"; system ("pause"); return 0; }
Mitenhän oikein sait tuon läpi kääntäjästä?
int i, luvut[i], valinta, arvotut[i];
Tuo ei takuulla toimi. Et voi käyttää muuttujaa i taulukon kokona, etenkään, kun et ole edes alustanut sitä.
Jaah, no ainakin Dev Cppn kääntäjä(joku MinGw) sen käänsi ihan ilman mitään vastaväitteitä.
No mutta siitä se virhe kuitenkin johtuu. i:n arvo voi olla mitä tahansa, ja Windows ei takuulla anna niin suurta muistimäärää. Pitäisi varmaan olla näin:
int i, luvut[ARVOTAAN], valinta, arvotut[ARVOTAAN];
"Kirjoita 7 numeroa" -kohdan jälkeen pitäisi varmaan olla for-silmukan ylärajana arvottavien määrä eli ARVOTAAN eikä 37, koska eihän siihen 37:ää lukua syötetä.
Vastaavasti arvonnassa rand() % 7;
pitäisi varmaankin olla (rand() % LUKUJA) + 1;
, jotta tulisi luku 1 - 37 eikä 0 - 6.
Lukujen tulostus on myös äärimmäisen epäselvä.
Tuosta puuttuu tarkistus, että samaa lukua ei arvottaisi moneen kertaan.
Jotakin muuta piti vielä kritisoida, mutta unohdin jo :)
Joo kiitos, täytyy kokeilla tuota.
Ihan hyvä vaan että tulee kritiikkiä, et kaikki pahat tavat saa pois heti alussa.
Niin se viimeinen juttu oli tuo system("pause");
Se on paha tapa jos mikä, koska se ei toimi kuin Windowsissa ja DOSissa. Laita mieluummin cin.get();
(tai pari, jos ei meinaa pysähtyä).
Joo, kiitos tuosta. Itse (ainakin)pyrin tekemään Linux ja Windows ohjelmia, sillä uskoakseni siitä on hyötyä myöhemmin.
Ohjelmista on aina kiva tehdä porttautuvia. Jos ei muuten, niin ihan vain näyttääkseen, ettei Windowsissa ole mitään, mitä ei voisi kiertää jotenkin porttautuvammin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.