Avatar billede jademutter Nybegynder
04. februar 2005 - 08:55 Der er 9 kommentarer og
1 løsning

Hjælp til funktionskald

hejsa

Jeg er ved at lave en lille c-program, men er stødt ind i et problem!

Jeg har 4 funktioner med navnene, bil1, bil2, bil3 og bil4,
samt en random()-generator der genererer 1,2,3 eller 4, kaldet res.

Hvordan får jeg koblet "res" til enden af bil, så programmet kører enten bil1, bil2, bil3, eller bil4, afhængig af random-generatoren.

Hvis det skulle udskrive på skærm kunne det løses med ("bil%d", res), men det skal bruges til et funktionskald.

/Jademutter
Avatar billede rbj_fp Nybegynder
04. februar 2005 - 08:58 #1
du kunne lave et array eller vector med pointers til dine funktioner, og så via din random funktion kan du så finde det funktions pointeren i arrayet
Avatar billede jademutter Nybegynder
04. februar 2005 - 09:20 #2
jamen er det ikke lidt overkill??? det er jo bare et simpelt funktionskald!
Avatar billede rbj_fp Nybegynder
04. februar 2005 - 09:26 #3
Jeg mener(men er ikke sikker) at pointers til funktioner skal laves ved compile-time
Avatar billede jademutter Nybegynder
04. februar 2005 - 09:53 #4
Hvad er compile-time?
Avatar billede rbj_fp Nybegynder
04. februar 2005 - 09:56 #5
compile-time, jeg mener at kode skal skrives og compiles med pointene til funktioner, så man ikke kan lave en pointer til en funktion mens programmet kører
Avatar billede jpk Nybegynder
04. februar 2005 - 09:59 #6
Kan du ikke bare lave en switch?

switch(res)
{
case 1:
  bil1();
  break;
case 2:
  bil2();
  break;
case 3:
  bil3();
  break;
case 4:
  bil4();
  break;
}
Avatar billede arne_v Ekspert
04. februar 2005 - 10:11 #7
det er ikke så svært med function pointers:

#include <stdio.h>
#include <stdlib.h>

typedef void (*fptr)();

void f1()
{
  printf("f1\n");
}

void f2()
{
  printf("f2\n");
}

void f3()
{
  printf("f3\n");
}

void f4()
{
  printf("f4\n");
}


int main()
{
    fptr f[] = { f1, f2, f3, f4 };
    int i;
    srand(12345);
    for(i=0;i<10;i++)
    {
        f[rand() % 4]();
    }
    return 0;
}
Avatar billede arne_v Ekspert
04. februar 2005 - 10:12 #8
Og det er faktisk lidt tricky fordi funktionsnavnene eksisterer ikke i
den oversatte kode kun i kilde koden.
Avatar billede jademutter Nybegynder
09. februar 2005 - 10:07 #9
jpk får point!

svar??
Avatar billede jpk Nybegynder
09. februar 2005 - 10:17 #10
Okay, takker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester