2 Kompilierfehler < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 12:59 Sa 09.07.2011 | Autor: | David90 |
Aufgabe | Hi Leute, ich schreib Montag Klausur über C und wollte noch ein bisschen üben. Ich hab folgendes Programm geschrieben, aber wenn ich es kompiliere kommen 2 Fehlermeldungen. Kann mir jemand sagen wo mein Fehler liegt? |
Mein Prog sieht folgendermaßen aus:
#include <stdio.h>
#include <math.h>
double berechnung(float seite, float *umkreisradius);
int main(void)
{
float s,ergebnis_umkreisradius;
double ergebnis_flaeche;
printf("Bitte geben Sie die Seitenlaänge des gleichseitigen Dreiecks ein. Die eingegebene Seite hat die Einheit [mm] Meter\n");
[/mm]
scanf("%f", &s);
ergebnis_flaeche=berechnung(s, &ergebnis_umkreisradius);
printf("Die Fläche des gleichseitigen Dreiecks beträgt %f [mm] \n", [/mm] ergebnis_flaeche);
printf("Der Umfang des gleichseitigen Dreiecks beträgt %f [mm] \n", [/mm] &ergebnis_umkreisradius);
return 0;
}
double berechnung (float seite, float *umkreisradius)
{
double flaeche;
*umkreisradius = seite/sqrt(3);
[mm] flaeche=seite^2/4*sqrt(3);
[/mm]
return flaeche;
}
Hoffe jemand kann mir schnellstmöglich helfen:(
gruß David
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:09 Sa 09.07.2011 | Autor: | David90 |
Achso bin ich ein Kunde xD die fehlermeldungen sind folgende:
flaeche_und_umfang.c: In function 'main':
flaeche_und_umfang.c:12: warning: format '%f' expects type 'double', but argument 2 has type 'float*'
flaeche_und_umfang.c: In function 'berechnung':
flaeche_und_umfang.c:20: error: invalid operands to binary ^ (have 'float' and 'double')
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:14 Sa 09.07.2011 | Autor: | felixf |
Moin!
> Achso bin ich ein Kunde xD
Kunde?
> die fehlermeldungen sind
> folgende:
>
> flaeche_und_umfang.c: In function 'main':
> flaeche_und_umfang.c:12: warning: format '%f' expects type
> 'double', but argument 2 has type 'float*'
Das ist kein Compilerfehler, aber eine Warnung. Sie weisst trotzdem auf einen Fehler hin. Den solltest du aber eigentlich auch selber finden koennen.
> flaeche_und_umfang.c: In function 'berechnung':
> flaeche_und_umfang.c:20: error: invalid operands to binary
> ^ (have 'float' and 'double')
Dazu hatte ich schon was geschrieben.
LG Felix
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:13 Sa 09.07.2011 | Autor: | felixf |
Moin David!
> Hi Leute, ich schreib Montag Klausur über C und wollte
> noch ein bisschen üben. Ich hab folgendes Programm
> geschrieben, aber wenn ich es kompiliere kommen 2
> Fehlermeldungen. Kann mir jemand sagen wo mein Fehler
> liegt?
>
> Mein Prog sieht folgendermaßen aus:
Du haettest ja netterweise auch sagen koennen, wo dein Compiler die Fehler findet. Die Information reicht ja meist schon aus, um zu sehen wo das Problem ist.
Und das Verwenden von [code]...[/code]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
haette das ganze auch etwas lesbarer gemacht.
> #include <stdio.h>
> #include <math.h>
> double berechnung(float seite, float *umkreisradius);
> int main(void)
> {
> float s,ergebnis_umkreisradius;
> double ergebnis_flaeche;
> printf("Bitte geben Sie die Seitenlaänge des
> gleichseitigen Dreiecks ein. Die eingegebene Seite hat die
> Einheit [mm]Meter\n");[/mm]
> scanf("%f", &s);
> ergebnis_flaeche=berechnung(s, &ergebnis_umkreisradius);
> printf("Die Fläche des gleichseitigen Dreiecks
> beträgt %f [mm]\n",[/mm] ergebnis_flaeche);
In dieser Zeile:
> printf("Der Umfang des gleichseitigen Dreiecks beträgt
> %f [mm]\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
&ergebnis_umkreisradius);
ist ein Fehler, die dein Compiler moeglicherweise nicht bemerkt hat.
> return 0;
> }
>
> double berechnung (float seite, float *umkreisradius)
> {
> double flaeche;
> *umkreisradius = seite/sqrt(3);
Diese Zeile hier:
> [mm]flaeche=seite^2/4*sqrt(3);[/mm]
ergibt in C oder C++ keinen Sinn. Was soll seite^2 sein? Wenn seite ein Integer-Datentyp wear, dann waer ^Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
das bitweise XOR. Fuer Fliesskommadatentypen ist es allerdings nicht definiert.
> return flaeche;
> }
> Hoffe jemand kann mir schnellstmöglich helfen:(
Abgesehen von meinen zwei Anmerkungen oben ist das Proramm korrekt, der Compiler akzeptiert es also nach bereits einer dieser Aenderungen (und zwar der unteren).
Kann es sein, dass du Link-Fehler auch zu Compilerfehler zaehlst? In dem Fall hast du evtl. das Dazulinken der C-Math-Library vergessen (oft mit dem Kommandozeilenargument -lm).
LG Felix
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:23 Sa 09.07.2011 | Autor: | David90 |
ok danke schon mal für die schnelle antwort^^ also die formel mit dem hoch 2 hab ich aus nem übungsbuch, da halte ich mich einfach dran^^ hab aus hoch 2 jetz einfach seite*seite gemacht und die binary fehlermeldung war weg^^ jetz is nur noch die warning mit dem expects tyoe 'double' da. Vielleicht bin ich blöd aber hattest du geschrieben wo der fehler liegt? weil ich finde den nich, diese fehlermeldung hab ich irgendwie immer bei jedem prog und hab nie rausgefunden was jetz falsch is...ergebnis_umkreisradius is doch typ float und der bei scanf muss man dann %f schreiben :O
gruß david
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:26 Sa 09.07.2011 | Autor: | David90 |
ähhh ich mein natürlich bei printf muss man für eine float variable %f schreiben xD
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:31 Sa 09.07.2011 | Autor: | felixf |
Moin!
> ok danke schon mal für die schnelle antwort^^ also die
> formel mit dem hoch 2 hab ich aus nem übungsbuch, da halte
> ich mich einfach dran^^ hab aus hoch 2 jetz einfach
> seite*seite gemacht und die binary fehlermeldung war weg^^
> jetz is nur noch die warning mit dem expects tyoe 'double'
> da. Vielleicht bin ich blöd aber hattest du geschrieben wo
> der fehler liegt? weil ich finde den nich, diese
> fehlermeldung hab ich irgendwie immer bei jedem prog und
> hab nie rausgefunden was jetz falsch
> is...ergebnis_umkreisradius is doch typ float und der bei
> scanf muss man dann %f schreiben :O
Nun, prinft braucht den Wert der Variablen, scanf deren Adresse.
In der Zeile ueber dem prinft mit dem Fehler hast du es ja auch richtig gemacht.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:37 Sa 09.07.2011 | Autor: | David90 |
ok danke dir:) hab das & weggemacht und jetz gehts:) er gibt twar immer noch eine meldung raus und zwar: unrecognized option '-1m' aber wenn ich das 1m weglasse klappt alles super:) danke nochmal...bleib mal on, kommen bestimmt nochn paar fragen im laufe des tages xD
|
|
|
|