Zum Inhalt springen

[C] Probleme mit der While Schleife


Empfohlene Beiträge

Geschrieben

/*

  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

Geschrieben

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.

Geschrieben (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...

attachment.php?attachmentid=2109&stc=1&d=1222462507

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!

post-53341-1443044806214_thumb.jpg

Bearbeitet von squidward
Geschrieben

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

Geschrieben
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...

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...