squidward Geschrieben 27. August 2008 Geschrieben 27. August 2008 (bearbeitet) //BMI Ausrechner (Prototyp) #include <stdio.h> int main () { double kg, m; // Definition der Variablen printf("\nBitte geben Sie ihre Koerper-Groeße (in m) ein! \n"); scanf("%3f", &m); // Tast.-Abfrage 1 und Zuweisung (m) (Format fuer 3-stellige Komma-Zahl) printf ("\nBitte geben sie jetzt ihr Gewicht (in kg) ein! \n"); scanf("%3f", &kg); // Tast.-Abfrage 2 und Zuweisung (kg) (Format fuer 3-stellige Komma-Zahl) printf ("\nIhr BMI betraegt: %d\n", kg / m * m) // Ausgabe des Quotient-Wertes getchar(); getcahr(); getchar(); // Warten auf Eingabe (3x) return 0; } Nabend, Bin noch totaler C - Noob. Ich Skripte gerade mein erstes kleines aber feines Tool. Nur streikt dieser "Borland C++ Compiler 1.0" (siehe Anhang). Ich bin ratlos und ich weiß nicht woran es liegen koennte... :confused: Wenn ihr mir weiterhelfen könntet, were ich sehr froh. Danke! Greetz! squidy Bearbeitet 27. August 2008 von squidward Zitieren
Klotzkopp Geschrieben 27. August 2008 Geschrieben 27. August 2008 Ich bin ratlos und ich weiß nicht woran es liegen koennte... An dem Unterschied zwischen "getchar" und "getcahr". Zitieren
squidward Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 Jetzt kommt noch eine Fehler-Meldung (siehe Anhang): ... getchars verbessert Danke! Zitieren
Klotzkopp Geschrieben 27. August 2008 Geschrieben 27. August 2008 Beim letzten printf fehlt das abschließende Semikolon. Zitieren
squidward Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 (bearbeitet) Jo, denn habe ich jetzt auch verbessert nun muessten alle fluechtigkeitsfehler der Vergangenheit angehoeren! Leider kommt da noch eine Fehlermeldung liegt es vielleicht am Compiler? Edit: Wie frustrierend man freut sich auf sein erstes Programm und dann tausender abstrakter Fehlermeldungen die nur ein etwas erfahrener Programmierer entziffern kann, was für ein desaster... Wuerde der Skript denn Theoretisch laufen? Bearbeitet 27. August 2008 von squidward Zitieren
Klotzkopp Geschrieben 28. August 2008 Geschrieben 28. August 2008 Wenn das die einzigen Fehlermeldungen sind, dann liegt es vermutlich an der Entwicklungsumgebung. Denn das Programm sollte sich jetzt zumindest kompilieren und linken lassen. Vielleicht solltest du dich von dieser Uralt-IDE lösen und etwas aktuelleres installieren, z.B. Code::Blocks oder Visual C++ Express, beides gibt's kostenlos. Nebenbei, nimm bitte nicht Dev-C++. Wie frustrierend man freut sich auf sein erstes Programm und dann tausender abstrakter Fehlermeldungen die nur ein etwas erfahrener Programmierer entziffern kann, was für ein desaster...Auch das liegt zum Teil daran, dass du eine sehr sehr alte Entwicklungsumgebung benutzt. Visual C++ 2008 lieferte für deine Fehler folgende Meldungen (Hervorhebung von mir): "getcahr": warning C4013: [B]'getcahr' undefined[/B]; assuming extern returning int main.obj : error LNK2001: unresolved external symbol _getcahr[/code] Semikolon: [code]error C2146: syntax error : [B]missing ';' [/B]before identifier 'getchar' Weitere Fehler im Code: doubles liest man mit %lf ein, nicht mit %f.doubles gibt man mit %f aus, nicht mit %d.Mit der Formatfestlegung auf 3 Stellen beim Einlesen machst du es nur dir und dem Benutzer schwer.Die Berechnungsformel ist falsch. Du rechnest zuerst / und dann *. Zitieren
squidward Geschrieben 28. August 2008 Autor Geschrieben 28. August 2008 Morgen! Vielleicht solltest du dich von dieser Uralt-IDE lösen und etwas aktuelleres installieren, z.B. Code::Blocks oder Visual C++ Express, beides gibt's kostenlos. Nebenbei, nimm bitte nicht Dev-C++. Du hast Recht, weg mit dem alten Kram! [*]doubles liest man mit %lf ein, nicht mit %f. Frage: Wie liest man dann integers mit d ein? Mit %ld viell.? Das Problem ist dass, das in meinem Buch von Bernd Bruegmann steht das ich floats mit %f und nicht mit %lf einlesen soll, aber das buch ist ja auch schon Uralt... na ja... ...oder es ist ein moeglicher Tippfehler vom Autor!? doubles gibt man mit %f aus, nicht mit %d. Hoppla, fluechtigkeitsfehler! Mit der Formatfestlegung auf 3 Stellen beim Einlesen machst du es nur dir und dem Benutzer schwer. Warum? Wie soll man denn sonst 3 Stellen eintippen können? Es dient doch dazu oder? Die Berechnungsformel ist falsch. Du rechnest zuerst / und dann *. Ach ja, in Klammern setzen... Verbesserter Code: //BMI Ausrechner (Prototyp) #include <stdio.h> int main () { double kg, m; // Definition der Variablen printf("\nBitte geben Sie ihre Koerper-Groeße (in m) ein! \n"); scanf("%3lf", &m); // Tast.-Abfrage 1 und Zuweisung (m) (Format fuer 3-stellige Komma-Zahl) printf ("\nBitte geben sie jetzt ihr Gewicht (in kg) ein! \n"); scanf("%3lf", &kg); // Tast.-Abfrage 2 und Zuweisung (kg) (Format fuer 3-stellige Komma-Zahl) printf ("\nIhr BMI betraegt: %f\n", kg / (m * m)); // Ausgabe des Quotient-Wertes getchar(); getchar(); getchar(); // Warten auf Eingabe (3x) return 0; } Danke! Greetz! squidy Zitieren
Panke Geschrieben 28. August 2008 Geschrieben 28. August 2008 Hallo, ich bin auf der Arbeit und kann den Code leider nicht ausprobieren. Aber trotzdem noch den Hinweis, das Programm robust gegen Falscheingaben zu machen. Gruß Tobias Zitieren
TDM Geschrieben 28. August 2008 Geschrieben 28. August 2008 Frage: Wie liest man dann integers mit d ein? Ja. Mit %ld viell.? %d. Das Problem ist dass, das in meinem Buch von Bernd Bruegmann steht das ich floats mit %f und nicht mit %lf einlesen soll, aber das buch ist ja auch schon Uralt... na ja... ...oder es ist ein moeglicher Tippfehler vom Autor!? float = %f double = long float = %lf (Eselsbrücke) Warum? Wie soll man denn sonst 3 Stellen eintippen können? Es dient doch dazu oder? Am besten alles als String einlesen und dann nach Möglichkeit parsen && (weiterrechnen ^ fehler ausgeben). Zitieren
squidward Geschrieben 28. August 2008 Autor Geschrieben 28. August 2008 (bearbeitet) float = %f double = long float = %lf (Eselsbrücke) Jetzt wird es mir allmaehlich klar. => jeder Datentyp hat eine eigene Formatanweißung. Danke! Am besten alles als String einlesen und dann nach Möglichkeit parsen && (weiterrechnen ^ fehler ausgeben). Soweit bin ich nun auch wieder nicht ^^ Frage: Was verbirgt sich denn hinter parsen und &&? && kommt mir bekannt vor, event. wenn Bedingung 1 und 2 Erfüllt ist, mache dies und das. Parsen? Meinst du viell. damit Debuggen?! Bearbeitet 28. August 2008 von squidward Zitieren
TDM Geschrieben 28. August 2008 Geschrieben 28. August 2008 Frage: Was verbirgt sich den hinter parsen und &&? && kommt mir bekannt vor, event. wenn Bedingung 1 und 2 Erfüllt ist, mache dies und das. Parsen? Meinst du viell. damit Debuggen?! Das war eine logische Verknüpfung. (kommt von zu viel programmieren ) Parsen: String in Zahl umwandel. Folglich: String in Zahl umwandeln und (weiterrechnen [wenn erfolgreich] oder fehler ausgeben [wenn nicht in zahl umwandelbar]). Das Problem an der Sache ist nämlich, das einige [...] Scherzkekse mal unsinnige Eingaben wie "sdioljfosdg" machen und dann stürzt das programm ab. Zitieren
squidward Geschrieben 29. August 2008 Autor Geschrieben 29. August 2008 /* BMI Rechner sw 29.8.08 */ #include <stdio.h> int main() { float k, g; printf("\nKoerpergroese eingeben: \n"); scanf("%f, &k"); printf("Gewicht eingeben: \n"); scanf("%f, &g"); printf("Ergebnis: %f\n", g / (k * k)); getchar(); getchar(); return 0; } Problem: Wenn ich die Datei Kompilire und dannach ausfuehre kommt eine Fehlermeldung, nachdem ich eine Zahl in "Koerpergroesse eingeben: " getippt habe. Was ist der Fehler? Uebrigens Code::Blocks ist Super! MfG\n squidward Zitieren
squidward Geschrieben 29. August 2008 Autor Geschrieben 29. August 2008 /* BMI Rechner sw 29.8.08 */ #include <stdio.h> int main() { float k, g, q; printf("\nKoerpergroese eingeben: \n"); scanf("%f, &k"); printf("Gewicht eingeben: \n"); scanf("%f, &g"); q = (g / (k * k)); printf("Ergebnis: %f\n", q); if (q > 25) { printf("Du hast ..."); } else { printf("Gut ..."); } getchar(); getchar(); return 0; } So, das voherige Problem wollte ich editieren aber da es ja ein Zeit-Limit gibt... So, dass vorherige Problem scheint sich irgendwie in Luft aufgeloest zu haben. Jetzt das naechste bei der auswertung kommt eine Abstrakte Zeichenkette... Warum? Zitieren
Klotzkopp Geschrieben 30. August 2008 Geschrieben 30. August 2008 scanf("%f, &k"); // falsch scanf("%f", &k); // richtig[/CODE] Und für's nächste Mal: "es kommt eine Fehlermeldung" ist keine ausreichende Fehlerbeschreibung. Auch wenn dir die Meldung nichts sagt, uns kann sie für die Fehlerdiagnose sehr wichtig sein. Zitieren
squidward Geschrieben 30. August 2008 Autor Geschrieben 30. August 2008 DANKESCHOEN Klotzkopp, TDM und Panke! Und für's nächste Mal: "es kommt eine Fehlermeldung" ist keine ausreichende Fehlerbeschreibung. Auch wenn dir die Meldung nichts sagt, uns kann sie für die Fehlerdiagnose sehr wichtig sein. Ja, sorry war wohl etwas zu ungeduldig...BMIRechner.zip Zitieren
carstenj Geschrieben 31. August 2008 Geschrieben 31. August 2008 Hi, was soll das Bild sagen? Ist das die "abstrakte Zeichenkette", die du nicht verstehst? Dann guck dir das mal an: ttp://www.cplusplus.com/reference/clibrary/cstdio/printf.html Ansonsten verstehe ich dein Problem nicht. Zitieren
squidward Geschrieben 31. August 2008 Autor Geschrieben 31. August 2008 was soll das Bild sagen? Ist das die "abstrakte Zeichenkette", die du nicht verstehst? Hi, es ist kein Problem! Ich wollte mich nur bei denjenigen bedanken die mir dabei geholfen haben. Greetz! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.