Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Uusi ongelma -> funktiot?

Sivun loppuun

treenaaja [28.10.2004 13:45:00]

#

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

Markus [28.10.2004 13:59:04]

#

Kyllä ainakin minulla kääntyy kunhan vain toteutan nuo funktiot, joista olet näköjään vain laittanut prototyypit.

treenaaja [28.10.2004 14:23:52]

#

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

WinC [28.10.2004 15:09:58]

#

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!");
}

treenaaja [28.10.2004 15:21:39]

#

Kääntäjä antaa mulle virheilmotuksen silti tässä kohdassa:

{
  int valinta;
  do{

"redefinition of `main"'
"`main' previously defined here"

Meitsi [28.10.2004 15:42:11]

#

Hmm...

int main(void)
{
...

Kokeileppa:

void main()
{
...

treenaaja [28.10.2004 15:45:41]

#

Meitsi kirjoitti:

Hmm...

Kokeileppa:

void main()
{
...

Ei natsaa..

Blaze [28.10.2004 16:48:24]

#

Meitsi kirjoitti:

Hmm...

int main(void)
{
...

Oikein.

Meitsi kirjoitti:

Kokeileppa:

void main()
{
...

Väärin.

WinC [28.10.2004 17:36:41]

#

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

teksturi [28.10.2004 18:15:06]

#

Tuleeko hyväkin tekstiseikkailu?

treenaaja [28.10.2004 18:29:51]

#

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

Deewiant [28.10.2004 18:46:10]

#

Annetaan sitten vinkki. Kissa toteutettaisiin näin (tuon main-funktion alapuolelle):

void kissa(void)
{
    printf("Kissa sanoo miau!");
}

treenaaja [28.10.2004 18:56:22]

#

Ei muuten toimi tuokaan.. En tajua mikä vikana.

WinC [28.10.2004 19:04:07]

#

kerroppas, millä kääntäjällä yrität tuota kääntää?
Alkaa vaikuttamaan siltä, että vika on jossain muualla kuin koodissa.

treenaaja [28.10.2004 19:12:23]

#

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?

tomaattigeeni [28.10.2004 21:02:19]

#

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

treenaaja [28.10.2004 21:24:12]

#

"Tarkista oletko määritellyt kaksi samantyyppistä muuttujaa tai funktiota (main)."


Huoh...... Ei oikeesti jaksa ymmärtää!

Meitsi [28.10.2004 21:45:37]

#

Kokeiles jollakin toisella kääntäjällä...
Lataa vaikka dev-c++. http://www.bloodshed.nu

treenaaja [28.10.2004 22:05:13]

#

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

Meitsi [28.10.2004 22:20:11]

#

No anna sen Viope C:n olla. Miksi korjata toimivaa? :)

acorn [28.10.2004 22:24:34]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta