Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » c99 while-Schleife doppelte Ausgabe beheben » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 3 Beiträge
as_string

Ach, was ich noch vergessen habe: Die Variable temp ist noch nicht initialisiert, wenn Du das erste Mal den Wert im "while" überprüfst. Das solltest Du nicht tun, wenn zufällig ein 'X' in temp wäre, dann würde das Programm direkt abbrechen.

Gruß
Marco
as_string

Das Problem ist, dass er nach der Abfrage der Zahlenwerte in den einzelnen else if-Zweigen, also nach dem scanf, immer noch eine Return-Zeichen im stdin-Puffer hat. Er nimmt das als Zeichen für das scanf beim erneuten Schleifendurchlauf, was ja weder R, E, D noch X entspricht, dann gibt er die "ungültiges Zeichen"-Meldung aus und fängt wieder von vorne die while-Schleife an, gibt also nochmal den Text aus.

Normalerweise verwendet keiner scanf in einem echten Programm mehr, weil es ziemlich unsicher ist und man keine Möglichkeit hat, zu überprüfen, ob die Eingabe syntaktisch korrekt war (also ob z. B. wirklich Zahlen eingegeben wurden und so). Normalerweise würde man mit fgets eine komplette Zeile als String einlesen und danach dann analysieren. Aber das ist viel mehr Aufwand, weshalb man sich das bei solchen Übungsaufgaben schenkt und lieber scanf() verwendet.

Hier:
https://stackoverflow.com/questions/5240...r-in-the-buffer
Steht einiges drüber drin und es bringt wohl was, wenn man vor dem %c ein Leerzeichen schreibt.

Gruß
Marco
Anni c99 while-Schleife doppelte Ausgabe beheben

Meine Frage:
Hallo Alle smile

ich habe folgendes Menübasiertes Programm zur berechnung verschiedener Flächen geschrieben. (c99)
Leider gibt es bei der Wiederholung der While-Schleife die erste print Ausgabe immer (min) doppel an bzw. Wirft mir die erste print-Ausgabe und das else (oft mehrfach) vor die Füße bevor es nochmal die erste print-Ausgabe ausgibt und dann den Nutzer die Eingabe tätigen lässt.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
#include <stdio.h>
#include <math.h>

int main() {

    float a, b, c, s,  Flaeche;
    char temp;


    while (temp != 'X')
    {
            printf("Waehlen Sie einen Objekttyen:\n"
               "(R) Rechteck\n"
               "(E) Ellipse\n"
               "(D) Dreieck\n"
               "(X) Exit\n");

            scanf("%c", &temp);
            
            if (temp == 'R') {
                printf("Geben Sie bitte die Seitenlaengen a und b ein:\n");
                scanf("%f %f", &a, &b);

                Flaeche = a * b;

                printf("Flaeche = %.6f\n", Flaeche);
            }

            else if (temp == 'E') {
                printf("Geben Sie bitte die Halbachsen a und b ein:\n");
                scanf("%f %f", &a, &b);

                Flaeche = a * b * 3.14159265359;

                printf("Flaeche = %.6f\n", Flaeche);
            }

            else if (temp == 'D') {
                printf("Geben Sie bitte die Seitenlaengen a und b und c ein:\n");
                scanf("%f %f %f", &a, &b, &c);

                s = (a + b + c) / 2;
                Flaeche = sqrt(s * (s - a) * (s - b) * (s - c));

                printf("Flaeche = %.6f\n", Flaeche);
            }

            else if (temp == 'X')
                return 0;

            else
                printf("Ungueltige Eingabe!\n\n");


        }
}


Meine Ideen:
Mir sind die Ideen ausgegangen wie ich dies beheben kann. Ich würde mich deswegen sehr über eure Hilfe freuen! smile