SWAP Problem

Hallo,
ich habe folgende Aufgabe :

SWAP Funktion soll nicht nur int Werte sondern auch long int, float und double Werte vertauschen.

Habe folgendes Programm geschrieben :
Jetzt bin ich an der suche nach Fehlern. Kann mir irgendeiner Helfen?

#include
#define INT 1;
#define LONG INT 2;
#define FLOAT 3;
#define DOUBLE 4;
void swap(int typ ,void(*x), void(*y));
int main(void )

{
int a=5;
int b=1;
printf(„a ist %c\t b ist %c\t\n“, a,b);
swap(INT, &a, &b);
printf(„a ist %c\t b ist %c\t\n“, a,b);
return 0;
}

void swap(int typ, void *x, void *y)
{
switch (typ)
{
case INT: {
int intern;
intern = *(int*)x;
*(int*)x = *(int*)y;
*(int*)y = intern;
}
break;
case LONG INT: {
long int intern;
intern = *(long int*)x;
*(long int*)x = *(long int*)y;
*(long int*)y = intern;
}
break;
case FLOAT: {
float intern;
intern = *(float*)x;
*(float*)x = *(float*)y;
*(float*)y = intern;
}
break;
case DOUBLE: {
double intern;
intern = *(double*)x;
*(double*)x = *(double*)y;
*(double*)y = intern;
}
break;
}
}

template
void swap(TYPE &p\_ra, TYPE &p\_rb)
{
p\_ra ^= p\_rb;
p\_rb ^= p\_ra;
p\_ra ^= p\_rb;
}

Hallo,

Danke für deine Antwort!
Jedoch habe ich noch eine Frage: kann mann die Funktion auch mit SWITCH Anweisung realisieren ? War meine Funktion ganz falsch oder kann man die irgendwie noch umändern damit sie funktioniert?

Danke,
MfG.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Danke für deine Antwort!
Jedoch habe ich noch eine Frage: kann mann die Funktion auch
mit SWITCH Anweisung realisieren ? War meine Funktion ganz
falsch oder kann man die irgendwie noch umändern damit sie
funktioniert?

Das funktioniert schon, nur darfst du nicht einfach Wild mit Zeigern um dich hauen !!!
Und die Parameter von printf() musst du dir auch noch richtig ansehen.

Zudem solltest du dir noch den Link „Hilfe zur Anwendung der HTML-Tags“ ansehen. Mit und bleibt dann die Formatierung erhalten.

#include
#define INT 1;

// Bezeichner dürfen keine Leerzeichen enthalten !!
#define LONG **\_** INT 2;

#define FLOAT 3;
#define DOUBLE 4;

// dies hier könnte den Compiler aus dem Tritt
// bringen, da "void(\*x)" wie ein Funktionsaufruf
// aussieht.
// void swap(int typ ,void(\*x), void(\*y));
void swap(int typ ,void \*x, void \*y);

int main(void )
{
 int a=5;
 int b=1;
// hier ist auch noch ein Fehler:
// "%c" druckt das das ASCII-Zeichen mit dem Wert von a
// printf("%c", 65); druckt ein "A"
// printf("%d", 65); druckt "65"
// printf("a ist %c\t b ist %c\t\n", a,b);
 printf("a ist %d\t b ist %d\t\n", a,b);
 swap(INT, &a, &b);
// printf("a ist %c\t b ist %c\t\n", a,b);
 printf("a ist %d\t b ist %d\t\n", a,b);
 return 0;
}

void swap(int typ, void \*x, void \*y)
{
 switch (typ)
 {
 case INT: 
 {
 int intern;
 intern = (int) \*x;
 (int) \*x = (int) \*y;
 (int) \*y = intern;
 }
 break;
 case LONG **\_** INT: 
 {
 long int intern;
 intern = (long int) \*x;
 (long int) \*x = (long int) \*y;
 (long int) \*y = intern;
 }
 break;
 case FLOAT: 
 {
 float intern;
 intern = (float) \*x;
 (float) \*x = (float) \*y;
 (float) \*y = intern;
 }
 break;
 case DOUBLE: 
 {
 double intern;
 intern = (double) \*x;
 (double) \*x = (double) \*y;
 (double) \*y = intern;
 }
 break;
 }
}

Danke,
MfG.

SWAP kein Problem mehr
Hallo,

und danke an alle die mir geantwortet habt.

Jetzt habe ich die Lösung:

#include

void swap (int typ, void *x, void *y);

int main(void)

{

int a = 10, b = 15;
long int c =20 , d =25;
double e =100, f=150;
float g = 10.5 , h = 15.5;

printf („a=%d, b=%d\n“ , a, b);
swap (1, &a, &b);
printf (" jetzt ist a=%d, b=%d\n" , a, b);

printf ("\n c=%ld, d=%ld\n" , c, d);
swap (2, &c, &d);
printf (" jetzt ist c=%ld, d=%ld\n" , c, d);

printf ("\n e=%.2f, f=%.2f\n" , e, f);
swap (3, &e, &f);
printf (" jetzt ist e=%0.2f, f=%0.2f\n" , e, f);

printf ("\n g=%.2lf, h=%.2lf\nf" , g, h);
swap (4, &g, &h);
printf (" jetzt ist g=%0.2lf, h=%0.2lf\n" , g, h);

return 0;
}

void swap (int typ, void *x, void *y)
{
switch (typ)
{

case 1:
{
int temp;
temp = (*(int*)x);
(*(int*)x) = (*(int*)y);
(*(int*)y) = temp;
break;
}

case 2:
{
long temp;
temp = (*(long*)x);
(*(long*)x) = (*(long*)y);
(*(long*)y) = temp;
break;
}

case 3:
{
double temp;
temp = (*(double*)x);
(*(double*)x) = (*(double*)y);
(*(double*)y) = temp;
break;
}

case 4:
{
float temp;
temp = (*(float*)x);
(*(float*)x) = (*(float*)y);
(*(float*)y) = temp;
break;
}

default: printf ("\n\nfalscher Typ\n");

}

}