Elikkä olen tekemässä CD-tietokantaa c -kielellä, ja olen vielä melko aloittelija sen kanssa. Ohjelma, jolla koodaan on Microsoft Visual Net Studio 2003.
Joka tapauksessa käyttäessäni tietuerakennetta tallentamisessa käy minulle niin, että jos tietueeni kysyy enemmän kuin kaksi tietoa, ohjelma hyppää sattumanvaraisesti kyselykenttien yli ja pahimmillaan suorittaa ohjelman siten, ettei minulla ole mitään mahdollisuutta tallentaa CD:n tietoja (nimeä, esittäjää, kappaleita...). Olen viettänyt aikaani jo usean viikon ajan ongelman parissa ja ohjelman koodi on hyvin pitkälle samanlainen kuin Päivi Hietasen kirjan esimerkeissä.
Voisiko joku kenties kertoa mistä on kysymys ja miten ongelman voisi korjata? Kyseessä on koulutyö, joten apu olisi kipeästi kaivattua.
Joka tapauksessa käyttäessäni tietuerakennetta tallentamisessa käy minulle niin, että jos tietueeni kysyy enemmän kuin kaksi tietoa, ohjelma hyppää sattumanvaraisesti kyselykenttien yli ja pahimmillaan suorittaa ohjelman siten, ettei minulla ole mitään mahdollisuutta tallentaa CD:n tietoja (nimeä, esittäjää, kappaleita...). Olen viettänyt aikaani jo usean viikon ajan ongelman parissa ja ohjelman koodi on hyvin pitkälle samanlainen kuin Päivi Hietasen kirjan esimerkeissä.
Voisiko joku kenties kertoa mistä on kysymys ja miten ongelman voisi korjata? Kyseessä on koulutyö, joten apu olisi kipeästi kaivattua.
Vastaukset 11
Vanhimmat
>>Voisiko joku kenties kertoa mistä on kysymys ja miten ongelman voisi korjata?>>
Ohjelmassasi on virheitä. Ne pitäisi löytää ja muuttaa lähdekoodi niiltä osin korrektiksi.
Jos et itse löydä virheitäsi, voit esimerkiksi näyttää koodiasi jollekin ja pyytää häntä etsimään ne. Jotkin oppilaitokset tarjoavat apua ja ohjausta näissä asioissa. Kannattaa kysyä koulultasi, onko siellä joku joka voisi auttaa.
Virheitä siinä kai voi olla, mutta ei kovin tavanomaisia, sanoisin. Ohjelma muuten pyörii hyvin, vain tietuerakenne pahasti mättää. Olen yrittänyt ruudunpysäytyskomentoja, poistanut mahd. häiritseviä muita toimintoja jne., ja sama perusongelma edelleen on. Vertailua olen tehnyt myös kolmen eri opaskirjan kanssa. Eräs henkilö, jonka kanssa keskustelin ongelmasta, epäili toistorakennetta mutta sitäkin ilman tulin kokeilleeksi, ja sama ongelma tuli. Eli se, mitä haluan tietää, on tuleeko kyseisen kääntäjän kanssa yleensä ongelmia tai milloin yleensä tulee vastaavanlainen error.
Koulu lienee seuraava vaihtoehto jos täältä ei löydy minkäänlaista apua.
>>Virheitä siinä kai voi olla, mutta ei kovin tavanomaisia, sanoisin.>>
Päinvastoin, ne kuulostavat hyvin tavanomaisilta.
>>Eli se, mitä haluan tietää, on tuleeko kyseisen kääntäjän kanssa yleensä ongelmia tai milloin yleensä tulee vastaavanlainen error.>>
Kääntäjää käytetään monessa paikassa toimivan tuotantokoodin tekemiseen. Vika on sinun omassa ohjelmassasi. Järki käteen ja vikaa etsimään.
Näin lähdekoodia tarkemmin näkemättä voin arvata, että viat voivat löytyä rivien 1 ja N väliltä, missä N on ohjelmasi pituus riveissä.
Olisehan se helpompaa auttaa jos näyttäisit ohjelmasi lähdekoodin, kaikilla kun ei satu olemaan Päivi Hietasen kirjaa ja tuosta sun ongelman kuvauksesta ei paljon irtoa.
Sinullahan on maailman paras ohjelmien kehitysympäristö, joten käytä sitä hyväksi!
>...maailman paras ohjelmien kehitysympäristö...
Dotnetti vs vai? :)
Miksiköhän se sitten on niin harvojen käytössä?
on perseestä ... studio 6 onihan ok vieläkuiteski jos nyt mikkiksen ns. "käyttöjärjestelmään" jotain haluaa väsätä :D:D
Kirja-arvio:
"Jos esimerkit olisivat asiaa paremmin valaisevia ja oikein, niin tasta voisi tulla vaikka kuinka hyvä kirja."
http://www.mit.jyu.fi/vesal/kurssit/kirjallisuutta.html
debug debug debug?????
Ensin tarvisi tietää kanava mille viritän kristallipalloni. Muuten ei voi auttaa.
Kerro nyt ystävä hyvä hieman enemmän mitä teet ja miten. Auttaminen on mahdotonta näillä tiedoilla. Mitä olet tehnyt? Miten? Mitä haluat tehdä? Minkälaisia tietueita käytät? Miten käytät niitä? Miten ongelma *tarkalleen* ilmenee? Mitä olet yrittänyt? Koodia näkyviin oleellisilta osilta.
Voin sanoa, että 99.9999% todennäköisyydellä vika on koodissasi vaikka et sitä itse löydäkään.
Veikkaisin kuitenkin että kyseessä on muistinhallintavirhe:
int *pointeri; //osoitin isoon muistialueeseen
pointeri = malloc(1000*sizeof(int)); //varataan tilaa itse muistialueelle
pointteri[999] = 1234; //kirjoitetaan muistialueeseen
Jos jätät keskimmäisen lauseen (muistinvaraus) pois, et saa mitään virheilmoitusta mutta kirjoitat jonkun toisen datan päälle jolloin se tuhoutuu. Samoin tapahtuu jos kirjoitat muistialueen ulkopuolelle;
pointteri[1000]=1234;
Myös indeksien kanssa pitää olla tarkka (helposti unohtaa että c:ssä indeksi alkaa nollasta).
Aina kun varaa muistia pitää myös varmistaa että varaus todella onnistui (esim if-lauseella tai TRY-CATCH-ENDTRY rakenteella)
Opi käyttämään debuggeria: Sillä voit pysäyttää ohjelman mille ohjelmariville tahansa (breakpoin) ja tutkia eri muuttujien sisältöä. Aseta pysähdyskohta sellaiseen paikkaan joka on mahdollisen lähellä virhekohtaa mutta kuitenkin ennen virhettä; sitten etenet rivi kellalla ja tutkit muuttujia kunnes paikallistat virheen.