Tällaiseen ongelmaan taas törmäsin. Alla olevasta koodista saan ilmoituksen : "Tarkista oletko määritellyt kaksi samantyyppistä muuttujaa tai funktiota (main)."
#include <stdio.h> void kissa(void); void koira(void); void lehma(void); int main() { int valinta; do{ printf("1:kissa\n2:koira\n3:lehmä\n"); printf("Lopetus negatiivisella luvulla.\n"); printf("Valitse eläin:"); scanf("%d", &valinta); if(valinta < 0) { printf("Ohjelma lopetetaan..."); } else if(valinta == 1) { kissa(); printf("Kissa sanoo miau!"); } else if(valinta == 2) { koira(); printf("Koira sanoo hau-hau!"); } else if(valinta == 3) { lehma(); printf("Lehmä sanoo ammuu!"); } else { printf("Antamasi luku ei kelpaa.\n\n"); } }while(valinta > 0); }
Mikä mättää?
Kyllä ainakin minulla kääntyy kunhan vain toteutan nuo funktiot, joista olet näköjään vain laittanut prototyypit.
Markus kirjoitti:
...kunhan vain toteutan nuo funktiot, joista olet näköjään vain laittanut prototyypit.
Saisinko yksinkertaisen esimerkin funktion toteuttamisesta? Googlella en löytänyt selventävää esimerkkiä.
Tässäpä kyseisellä koodilla selvennettynä funktioiden toteutus.
#include <stdio.h> //funktioiden esittelyt void kissa(void); void koira(void); void lehma(void); int main(void) { int valinta; do{ printf("1:kissa\n2:koira\n3:lehmä\n"); printf("Lopetus negatiivisella luvulla.\n"); printf("Valitse eläin:"); scanf("%d", &valinta); if(valinta < 0) { printf("Ohjelma lopetetaan..."); } else if(valinta == 1) { kissa(); //funktiokutsu } else if(valinta == 2) { koira(); //funktiokutsu } else if(valinta == 3) { lehma(); //funktiokutsu } else { printf("Antamasi luku ei kelpaa.\n\n"); } }while(valinta > 0); } //tästä alkaa funktioiden toteutukset //siirsin "ääntelyt" funktioihin, koska tämä on //mitä nähtävästi hait ohjelmalta. void kissa(void){ printf("Kissa sanoo miau!"); } void koira(void){ printf("Koira sanoo hau-hau!"); } void lehma(void){ printf("Lehmä sanoo ammuu!"); }
Kääntäjä antaa mulle virheilmotuksen silti tässä kohdassa:
{ int valinta; do{
"redefinition of `main"'
"`main' previously defined here"
Hmm...
int main(void) { ...
Kokeileppa:
void main() { ...
Meitsi kirjoitti:
Hmm...
Kokeileppa:
void main() { ...
Ei natsaa..
Meitsi kirjoitti:
Hmm...
int main(void) { ...
Oikein.
Meitsi kirjoitti:
Kokeileppa:
void main() { ...
Väärin.
Hyvin tuo ainakin minulla kääntyy ihan millä vaan... O_o
Mutta voithan kokeilla muutta mainin muotoon:
int main(int argc, char* argv[]) { ...//koodi return(0); }
Tuleeko hyväkin tekstiseikkailu?
Jos tuo kerran kääntyy ihan millä vaan, niin laitetaan tänne nyt sitten tehtävänanto. Rupeaa olemaan sen verran hepreaa että en enää tajuu mitä tässä pitää tehdä..
Eli tässä:
Tehtäväsi on täydentää alla esitetty lähdekoodi puuttuvilla funktioilla. Ohjelma tulostaa käyttäjän valintojen mukaan seuraavat tekstit:
Valinta 1: "Kissa sanoo miau!"
Valinta 2: "Koira sanoo hau-hau!"
Valinta 3: "Lehmä sanoo ammuu!"
Käynnistettäessä ohjelma pyytää valitsemaan jonkin eläimistä. Kun valinta on suoritettu ohjelma kutsuu funktiota, joka tulostaa oikean lausahduksen. Funktion suorituksen jälkeen palaa ohjelma kysymään käyttäjältä uutta valintaa. Ohjelma lopetetaan negatiivisella kokonaisluvulla.
Täydennettävä koodi:
#include <stdio.h> void kissa(void); void koira(void); void lehma(void); void main() { int valinta; do{ printf("1:kissa\n2:koira\n3:lehmä\n"); printf("Lopetus negatiivisella luvulla.\n"); printf("Valitse eläin:"); scanf("%d", &valinta); if(valinta < 0) { printf("Ohjelma lopetetaan..."); } else if(valinta == 1) { kissa(); } else if(valinta == 2) { koira(); } else if(valinta == 3) { lehma(); } else { printf("Antamasi luku ei kelpaa.\n\n"); } }while(valinta>0); }
Vihje: Tehtävän tavoitteena on saada sinulle tuntuma funktioiden kirjoittamiseen. Älä kopioi lähdekoodia vaan kirjoita ainoastaan funktiot, jotka suorittavat tulostukset. Funktiot on esitelty prototyyppeissä ennen pääohjelmaa
Annetaan sitten vinkki. Kissa toteutettaisiin näin (tuon main-funktion alapuolelle):
void kissa(void) { printf("Kissa sanoo miau!"); }
Ei muuten toimi tuokaan.. En tajua mikä vikana.
kerroppas, millä kääntäjällä yrität tuota kääntää?
Alkaa vaikuttamaan siltä, että vika on jossain muualla kuin koodissa.
Kaikennäköistä on kokeiltu, mutta en tuota yhtään ihmettelis. Kyseessä on Viope C niminen harjoitusohjelma, joka toimii netin yli. Kääntäjä on käsittääkseni Lappeenrannan ammatti/teknillisessä korkeakoulussa, eli lähetän koodin sinne ja se palauttaa mitä on vikana. Olisiko ideoita?
Voin tietysti lähettää screenshotit tosta kääntäjän virhejutuista ym. jos kiinnostaa?
#include <stdio.h> void kissa() { printf("miau\n"); } void koira() { printf("hau\n"); } void lehma() { printf("ammuu\n"); } int main() { int valinta=4; do { printf("1:kissa\n2:koira\n3:lehmä\n"); printf("Lopetus negatiivisella luvulla.\n"); printf("Valitse eläin:"); scanf("%d", &valinta); if(valinta < 0) { printf("Ohjelma lopetetaan..."); } else if(valinta == 1) { kissa(); } else if(valinta == 2) { koira(); } else if(valinta == 3) { lehma(); } else if(valinta > 3){ printf("Antamasi luku ei kelpaa.\n\n"); } }while(valinta>0); return 0; }
koitappa toi kokonaisuus laittaa kääntäjään, mulla ainakin toimii vallan mainiosti.
"Tarkista oletko määritellyt kaksi samantyyppistä muuttujaa tai funktiota (main)."
Huoh...... Ei oikeesti jaksa ymmärtää!
Kokeiles jollakin toisella kääntäjällä...
Lataa vaikka dev-c++. http://www.bloodshed.nu
Tolla kääntäjällä se kyllä näyttäis toimivan niin kun pitää, mutta sitten Viope C:ssä se silti valittaa
"Tarkista oletko määritellyt kaksi samantyyppistä muuttujaa tai funktiota (main)."
No anna sen Viope C:n olla. Miksi korjata toimivaa? :)
treenaaja kirjoitti:
Vihje: Tehtävän tavoitteena on saada sinulle tuntuma funktioiden kirjoittamiseen. Älä kopioi lähdekoodia vaan kirjoita ainoastaan funktiot, jotka suorittavat tulostukset. Funktiot on esitelty prototyyppeissä ennen pääohjelmaa
Maalaisjärjellä: Älä kopioi valmista koodia mukaan -> main() jää pois -> toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.