Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelma on suorittanut laittoman toiminnon

Sivun loppuun

squid [29.01.2005 21:24:28]

#

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;
}

Metabolix [29.01.2005 21:27:47]

#

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ä.

squid [29.01.2005 21:29:21]

#

Jaah, no ainakin Dev Cppn kääntäjä(joku MinGw) sen käänsi ihan ilman mitään vastaväitteitä.

Metabolix [29.01.2005 21:36:18]

#

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 :)

squid [29.01.2005 21:38:20]

#

Joo kiitos, täytyy kokeilla tuota.
Ihan hyvä vaan että tulee kritiikkiä, et kaikki pahat tavat saa pois heti alussa.

Metabolix [29.01.2005 21:40:15]

#

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ä).

squid [29.01.2005 21:57:16]

#

Joo, kiitos tuosta. Itse (ainakin)pyrin tekemään Linux ja Windows ohjelmia, sillä uskoakseni siitä on hyötyä myöhemmin.

Metabolix [29.01.2005 22:49:38]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta