Was ist da Falsche bei meinem Code? Da steht zu wenig Argumente im Funktionsabruf oder auch das Argument vom Typ Bruch ist mit dem int nicht kompatibel?
#include <stdio.h>
#include <stdlib.h>
/*
Aufgabe:
Gegeben sei eine Struktur „BRUCH“ bestehend aus Zähler und Nenner. Schreiben Sie
eine Funktion „BruchDivision“, die eine Struktur „BRUCH“ als Input bekommt und als
Output das Ergebnis der Division Zähler/Nenner zurückgibt. Wählen Sie die entsprechenden
Datentypen !
*/
typedef struct {
int zaehler;
int nenner;
} BRUCH;
int Bruchdivision(int zaehler, int nenner)
{
return(zaehler / nenner);
}
int main()
{
BRUCH b1;
b1.zaehler = 4;
b1.nenner = 5;
int z = Bruchdivision(b1);
printf("Ergebnis = %d \n", z);
system("pause");
return 0;
}
Bitte Problem genau beschreiben. Wenigstens die Programmiersprache nennen. Kommt ein Kompilierfehler? Kommt ein Laufzeitfehler? Wenn ja, welcher? Falsches Verhalten? Welches?
Da steht zu wenig Argumente im Funktionsabruf oder auch das Argument vom Typ Bruch ist mit dem int nicht kompatibel?
2 Antworten
Bruchdivision erwartet Zähler und Nenner als seperate Integralwerte (2 Parameter), Du übergibst beim Aufruf ein struct aus zwei Integralwerten (1 Parameter).
int Bruchdivision(int zaehler, int nenner);
/* Falscher Prototyp gemäß Aufgabenstellung. */
float Bruchdivision(BRUCH fraction);
/*wäre wohl angemessener. */
Der Aufruf war gemäß Aufgabe, der Teil hier ist das eigentliche Prioblem:
int Bruchdivision(int zaehler, int nenner)
{
return(zaehler / nenner);
}
float Bruchdivision(BRUCH f){ return f.zaehler/f.nenner;}
/* Dann Aufruf in main() mit
float z=Bruchdivision(b1);
und die Anpassung des printf nicht vergessen */
#include <stdio.h>
/* Aufgabe:
Gegeben sei eine Struktur „BRUCH“ bestehend aus Zähler und Nenner. Schreiben Sie
eine Funktion „BruchDivision“, die eine Struktur „BRUCH“ als Input bekommt und als
Output das Ergebnis der Division Zähler/Nenner zurückgibt. Wählen Sie die entsprechenden
Datentypen !
*/
typedef struct {
int zaehler;
int nenner;
} BRUCH;
float Bruchdivision(BRUCH fraction)
{
float zaehler = 100;
int nenner = 2;
return(zaehler / nenner);
}
int main()
{
BRUCH b1;
b1.zaehler = 4;
b1.nenner = 5;
float z = Bruchdivision(b1);
printf("Ergebnis = %f \n", z);
system("pause");
return 0;
}
Und wieso bekomme ich wegen fraction bitte so viele nullstellen raus
typedef struct {
int zaehler;
int nenner;
} BRUCH;
float Bruchdivision(BRUCH fraction)
{
return (float)fraction.zaehler / fraction.nenner;
}
int main()
{
BRUCH b1;
b1.zaehler = 4;
b1.nenner = 5;
float z = Bruchdivision(b1);
printf("Ergebnis = %f \n", z);
return 0;
}
Mein Fehler, bei zwei ints findet eien Ganzzahldivision statt, daher muß mindestens einer der beiden gecastet werden.
Na das da oben von mir reicht mir eh aus aber was bedeutet FRACTION und wieso bekomme ich auf der Konsole die vielen unnötigen null weg
Das ist der Name des Parameters, wie üblich.
printf("%.1f",....)
Siehe vollständige Doku zu printf.
Integer hat keine Nachkommastellen, falls du das meinst.
Du übergibst ja nicht zwei int wie gefordert sondern einen struct. Entweder die Signatur der Funktion ändern, also einen struct erwarten, oder zwei int übergeben statt eines structs.
Die Anzahl und der Typ der Parameter plus der Rückgabetyp der Funktion ist die Signatur. Also die Parameter änderst du von (int, int) in (BRUCH)