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,

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

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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