squidward Geschrieben 26. September 2008 Geschrieben 26. September 2008 /* Name: cab Version: Beta Info: Programm welches quadratische Gleichungen der Form ax² + bx + c = 0 berechnen kann. Autor: squidward Datum: 25.9.08 */ #include <stdio.h> #include <math.h> int main() { //PROGRAMM INFO printf("cab Betaversion (C) 2008 squidsoft\n"); char close; [B][COLOR="Red"]while (close != 'c') {[/COLOR][/B] double a, b, c, zahl, wurzel, diskriminante_d, quadrat, nenner, ergebnis1, ergebnis2; //ABFRAGE DER VARIABLEN a, b und c printf("\na: "); scanf("%lf", &a); printf("\nb: "); scanf("%lf", &; printf("\nc: "); scanf("%lf", &c); //a, b, c FORMEL UND AUSWERTUNG zahl = (-(); quadrat = pow((, 2); diskriminante_d = ((quadrat)-4*(a)*(c)); wurzel = sqrt(diskriminante_d); nenner = (2*(a)); // 2 x a ergebnis1 = ((zahl + wurzel) / nenner); ergebnis2 = ((zahl - wurzel) / nenner); //FEHLERMELDUNG if (diskriminante_d < 0) { printf("\n\nError!"); } else if (diskriminante_d > 0) { printf("\nx1: %lf", ergebnis1); printf("\nx2: %lf", ergebnis2); } [B][COLOR="Red"]printf("\n\nWeiter? "); scanf("%c", &close); }[/COLOR][/B] getchar(); getchar(); return 0; } [/code] Also wenn ich tatsaechtlich richtig verstanden habe, macht die While Schleife folgendes: Solange Bedingung nicht erfuellt, mache weiter oder gehe die Schleife xMal durch! Zwar macht die Schleife auch das, jedoch startet sie wenn ich mich richtig ausdruecke die Funktion erneut. Und ich muss daher den Buchstaben c 2x eingeben. Wie kann man das vermeiden? Ich dachte da an so ein break; Befehl in einem if block... aber wozu dann das while... Ich will es unbedingt nur mit while... (wenn das überhaupt moeglich ist) MfG Zitieren
Bubble Geschrieben 26. September 2008 Geschrieben 26. September 2008 Zwar macht die Schleife auch das, jedoch startet sie wenn ich mich richtig ausdruecke die Funktion erneut. Und ich muss daher den Buchstaben c 2x eingeben. Wie kommst Du darauf? Nur solange die Schleifenbedingung wahr ist, wird der zur Schleife gehörende Block abgearbeitet. Zitieren
squidward Geschrieben 26. September 2008 Autor Geschrieben 26. September 2008 (bearbeitet) Wie kommst Du darauf? Nur solange die Schleifenbedingung wahr ist, wird der zur Schleife gehörende Block abgearbeitet. Hast du etwa nicht verstanden? Solange Bedingung nicht erfuellt, mache weiter oder gehe die Schleife xMal durch! Das selbe... Dann habe ich mich eben leider doch falsch ausgedrueckt... Also, wie man sieht habe ich oben in der While Schleife (close != c), und unten also am ende der While Schleife habe ich scanf("%c", &close). Wobei moment es wird ja nicht gewartet bis ich etwas bei >>Weiter?<< eingegeben habe oder? Das heißt ja dann das die while schleife sofort die abbruchbedingung c benoetigt oder? Nun ja sieht selbst... EDIT: Solange Bedingung nicht erfuellt, mache weiter oder gehe die Schleife xMal durch! Hoppla! So jetzt! Solange Bedingung nicht erfuellt, gehe die Schleife xMal durch! Bearbeitet 26. September 2008 von squidward Zitieren
Mephisto81 Geschrieben 27. September 2008 Geschrieben 27. September 2008 hallo, zunächst einmal sollte man Variablen vor der Verwendung generell ordentlich initialisieren (siehe "close"). scanf("%c"...) halte ich in diesem Fall für suboptimal. <VERMUTUNG>Das die Schleife zweimal durchlaufen wird, könnte daran liegen, dass der Druck auf die "Enter"-Taste ebenfalls noch im stdin Puffer liegt und die Schleife somit nochmal durchlaufen wird.</VERMUTUNG> Wenn man unbedingt scanf verwenden möchte, müsste man einen flush auf stdin machen (dieser ist, soweit ich weiß, unter C nicht definiert, also auch keine schöne Lösung - trotzdem funktionierte es bei meinem MS VC 2008 Compiler, was aber nichts bedeutet). Ich würde an der scanf Stelle ein getchar verwenden - das befreit dich IMHO von den meisten Problemen und Compiler-spezifischen Umgebungen an dieser Stelle. gruß mep Zitieren
squidward Geschrieben 27. September 2008 Autor Geschrieben 27. September 2008 Ich würde an der scanf Stelle ein getchar verwenden - das befreit dich IMHO von den meisten Problemen und Compiler-spezifischen Umgebungen an dieser Stelle. Hi, Jo funzt jetzt, jedoch musste ich auch an der >>while Schleife<< ein getchar() fuegen. => Das Prog. fraegt schon am Anfang nach der ich sag mal Abbruchsbedingung 'c', aber im großen und ganzen ist es Ok! Es funzt! Danke! PS: Ach ja, eine Frage noch: Wie kann man Texte in Konsolen-Applikationen einfaerben? Denn ich moechte die Auswertung bzw. die Loesung hervorheben. Also mit <stdio.h> komme ich nicht weiter und mit <conio.h> auch nicht... Zitieren
Mephisto81 Geschrieben 27. September 2008 Geschrieben 27. September 2008 hallo, PS: Ach ja, eine Frage noch: Wie kann man Texte in Konsolen-Applikationen einfaerben? dies wird durch den C/C++ Standard nicht abgebildet. Du musst auf betriebssystemspezifische Funktionen zurückgreifen. Eine ordentliche Suchmaschinen-Anfrage wird dir brauchbare Ergebnisse liefern. gruß mep Zitieren
Klotzkopp Geschrieben 28. September 2008 Geschrieben 28. September 2008 Eine ordentliche Suchmaschinen-Anfrage wird dir brauchbare Ergebnisse liefern. Ein Link auf die Startseite von Google ist nicht besonders hilfreich. squidward, da du ja offenbar unter Windows zu Gange bist, könnte das hier für dich interessant sein: Improved Console Zitieren
Mephisto81 Geschrieben 28. September 2008 Geschrieben 28. September 2008 hallo, Ein Link auf die Startseite von Google ist nicht besonders hilfreich. wenn eine Google-Suche mit einem Zeitaufwand unter 1 Min. brauchbare Ergebnisse liefert bin ich da anderer Meinung. Da fehlte mir etwas Eigeninitiative... gruß mep Zitieren
squidward Geschrieben 5. Oktober 2008 Autor Geschrieben 5. Oktober 2008 squidward, da du ja offenbar unter Windows zu Gange bist, könnte das hier für dich interessant sein: Improved Console Jawohl, aber ich weis leider nicht wie man die 'ic.h' Library-Datei in mein Projekt mit CodeBlocks bindet. 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.