C-ongelmia

Tämä ohjelma on kirjasta Petri Kokko: Pelien parhaat. WSOY 1994.

Mutta DJGPP valittaa:
avaruus.c: In function `osui_kenttaan':
avaruus.c:163: too many arguments to function `random'
avaruus.c: In function `liikuta_monkijoita':
avaruus.c:179: too many arguments to function `random'
avaruus.c: In function `main':
avaruus.c:259: warning: return type of `main' is not `int'

Olenko siis tehnyt kirjoitusvirheitä kirjasta suoraan kopioidessani, vai mikä on vikana?
Tässä on kirjasta kopioimani koodi. Rivit, joista kääntäjä valittaa, olen merkinnyt kommentein. (Toivottavasti tämä nyt näkyy oikein.)

#include
#include
#include
#include
#include

#define AMMUKSIA 5
#define POMMEJA 50
#define MONKIJOITA 36
#define RIVILLA_MONKIJOITA 9
#define OLION_KOKO 3
#define HIDASTUS 50
#define UUSI_TYKKI 3000
#define UUSI_KENTTA 1000
#define MAX_X 70
#define MAX_Y 20
#define KENTTA_Y MAX_Y-3
#define KENTTAVOIMA 5
#define VASEMMALLE 'z'
#define OIKEALLE 'c'
#define AMMU 'm'
#define LOPETA 'L'
#define TYHJA_PAIKKA " "
#define TYKKI "o|o"
#define MONKIJA ""
#define RAJAHDYS "\|/"
#define AMMUS '*'
#define POMMI ';'
#define KENTTA '#'

struct olio{int x,y;} a[AMMUKSIA],m[MONKIJOITA],p[POMMEJA],t;
int ammus_lkm;
int kentta_x[MAX_X];
int kentta_lkm;
int monkija_lkm;
int pommi_lkm;
int suunta;
int kierros=0;
int loppu=0;
int tappotahti=100;
int tykkeja=3;
long int pisteet=0;

void alkuruutu()
{
clrscr();
gotoxy(20,5); printf("AVARUUSMÖNKIÄISTEN HYÖKKÄYS");
gotoxy(25,8); printf("VASEMMALLE: %c",VASEMMALLE);
gotoxy(25,9); printf("OIKEALLE: %c",OIKEALLE);
gotoxy(25,10); printf("AMMU: %c",AMMU);
gotoxy(25,12); printf("KESKEYTÄ PELI: %c",LOPETA);
gotoxy(20,15); printf("Tuhoa inhat avaruusmönkijäiset");
gotoxy(20,16); printf("ennen kuin ne pääsevät maan pinnalle.");
gotoxy(20,19); printf("%s MÖNKIJÄ = 10 PISTETTÄ",MONKIJA);
gotoxy(20,21);
printf("%s UUSI TYKKI %d PISTEEN VÄLEIN",TYKKI,UUSI_TYKKI);
gotoxy(20,23);
printf("%c UUSI SUOJAKENTTÄ %d PISTEEN VÄLEIN",
KENTTA,UUSI_KENTTA); getch();
}

void piirra_uudestaan()
{
int i;
clrscr();
for(i=0; i0) tappotahti-=5;
t.x=MAX_X/2;
t.y=MAX_Y;
for(i=0; i
4590
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Noi jutut riippuu kääntäjästä etc. etc.

Toi main()issa oleva virhe johtuu siitä, että tosta on monta muotoo. Itse opin aikoinaan void main(void) muodon, mutta tässä tapauksessa muuta sourcessa lukeva "void main()" muotoon "int main()" (tai ehkä jopa int main(void)? en tiedä en ole aikoihin ohjelmoinut C:llä). Ja mainin loppuun "return 0;".

Muut virheet tulevat siitä että kirjassa on eri muoto random() funktiosta kuin kääntäjälläsi. random()han tuottaa "satunnais"luvun, mutta sen sijaan että kääntäjäsi tuntisi funktion random(int x), niin se tunnistaa jonkun toisen muodon (en tiedä kyllä minkä, voi olla random(void) tai random (int, int))...

Äänestä

En ole koskaan harjoitellut saati yrittänyt C:tä, mutta tässä on osui_kenttaan vika:

int osui_kenttaan(int x, int y)
{
int i;
if(y!=KENTTA_Y || kentta_lkm

Äänestä

Too many arguments in function random...
Eli ei siinä ole kun toi KENTTAVOIMA parametrina. Sun pitää lukea sun kääntäjän helpeistä miten siinä käytetään randomia.

Äänestä

man random - komento kertoi, ettei random funktiolla saa olla parametria, kun taas srandom funktiolla on:

tee seuraava muutos:

    srandom(KENTTAVOIMA);
    if(random()==0) /* TÄMÄ ON RIVI 163 */

Muuta lisäksi main -funktio muotoon

int main(void)
{
// ... koodia
return 0;
}

Tällöin ohjelmaa palauttaa käyttikselle arvon (nolla) , jolloin MIKÄÄN kääntäjä ei herjaa ja ohjelma on yhteensopivampi kaikkialla.

Äänestä

Kommentoi aloitusta


joku kirjoitti:

Tämä ohjelma on kirjasta Petri Kokko: Pelien parhaat. WSOY 1994.

Mutta DJGPP valittaa:
avaruus.c: In function `osui_kenttaan':
avaruus.c:163: too many arguments to function `random'
avaruus.c: In function `liikuta_monkijoita':
avaruus.c:179: too many arguments to function `random'
avaruus.c: In function `main':
avaruus.c:259: warning: return type of `main' is not `int'

Olenko siis tehnyt kirjoitusvirheitä kirjasta suoraan kopioidessani, vai mikä on vikana?
Tässä on kirjasta kopioimani koodi. Rivit, joista kääntäjä valittaa, olen merkinnyt kommentein. (Toivottavasti tämä nyt näkyy oikein.)

#include
#include
#include
#include
#include

#define AMMUKSIA 5
#define POMMEJA 50
#define MONKIJOITA 36
#define RIVILLA_MONKIJOITA 9
#define OLION_KOKO 3
#define HIDASTUS 50
#define UUSI_TYKKI 3000
#define UUSI_KENTTA 1000
#define MAX_X 70
#define MAX_Y 20
#define KENTTA_Y MAX_Y-3
#define KENTTAVOIMA 5
#define VASEMMALLE 'z'
#define OIKEALLE 'c'
#define AMMU 'm'
#define LOPETA 'L'
#define TYHJA_PAIKKA " "
#define TYKKI "o|o"
#define MONKIJA ""
#define RAJAHDYS "\|/"
#define AMMUS '*'
#define POMMI ';'
#define KENTTA '#'

struct olio{int x,y;} a[AMMUKSIA],m[MONKIJOITA],p[POMMEJA],t;
int ammus_lkm;
int kentta_x[MAX_X];
int kentta_lkm;
int monkija_lkm;
int pommi_lkm;
int suunta;
int kierros=0;
int loppu=0;
int tappotahti=100;
int tykkeja=3;
long int pisteet=0;

void alkuruutu()
{
clrscr();
gotoxy(20,5); printf("AVARUUSMÖNKIÄISTEN HYÖKKÄYS");
gotoxy(25,8); printf("VASEMMALLE: %c",VASEMMALLE);
gotoxy(25,9); printf("OIKEALLE: %c",OIKEALLE);
gotoxy(25,10); printf("AMMU: %c",AMMU);
gotoxy(25,12); printf("KESKEYTÄ PELI: %c",LOPETA);
gotoxy(20,15); printf("Tuhoa inhat avaruusmönkijäiset");
gotoxy(20,16); printf("ennen kuin ne pääsevät maan pinnalle.");
gotoxy(20,19); printf("%s MÖNKIJÄ = 10 PISTETTÄ",MONKIJA);
gotoxy(20,21);
printf("%s UUSI TYKKI %d PISTEEN VÄLEIN",TYKKI,UUSI_TYKKI);
gotoxy(20,23);
printf("%c UUSI SUOJAKENTTÄ %d PISTEEN VÄLEIN",
KENTTA,UUSI_KENTTA); getch();
}

void piirra_uudestaan()
{
int i;
clrscr();
for(i=0; i0) tappotahti-=5;
t.x=MAX_X/2;
t.y=MAX_Y;
for(i=0; i

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu