Frage von Markus17, 60

Kann mir jemand bei der Behebung eines C++ Bugs helfen?

Hallo Leute, ich habe folgenden Code

    cout << "Calculator chosen \n                                     
    cout << "Waiting for Input\n\n";
        servus:

            scanf ("%f %c %f", &b1 , &necs[0], &b2);
                
            size_t found1 = necs.find_first_of("+");
            size_t found2 = necs.find_first_of("-");
            size_t found3 = necs.find_first_of("*");
            size_t found4 = necs.find_first_of("x");
            size_t found5 = necs.find_first_of("/");
            size_t found6 = necs.find_first_of(":");

        if(found1!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 + b2 <<endl; 
            goto servus;
            }
        if(found2!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 - b2 <<endl<<endl;  
            goto servus;
            }   
        if(found3!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 * b2 <<endl<<endl; 
            goto servus;
            }   
        if(found4!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 * b2 <<endl<<endl; 
            goto servus;
            }   
        if(found5!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 / b2 <<endl<<endl;
            goto servus;
            }   
        if(found6!=string::npos){
            cout << b1 << necs << b2 << " = " << b1 / b2 <<endl<<endl;
            goto servus;
            }               
                                                            
        else{
            cout "Back to the menu\n";
            Sleep(100);
            goto menu;
        }   

Jetzt zum meiner Frage. Wenn ich irgendetwas eingebe. was kein Wort ist, wird dauerhaft die vorletzte Eingabe wiederholt. Also wenn ich eine Rechenaufgabe eingebe, funktioniert alles. Und wenn ich dann beispielsweise hallo eingebe, wird diese Rechenaufgabe die ganze Zeit wiederholt. Ich will jetzt, dass wenn irgendetwas, dass keine Rechenaufgabe ist eingegeben wird, das ausgeführt, was in Else steht. (goto menu). Kann mir jemand ein Codebeispiel geben, dass mein Problem löst.

Danke im Voraus, Markus

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von surbahar53, 24

Der Fehler liegt wahrscheinlich bei scanf( ... ). Das Format verlangt eine bestimmte Eingabesyntax, also drei Parameter. Gibt man nur einen Parameter wie "hallo" ein, nehme ich an, dass die Variablen necs und b2 undefiniert bzw. unverändert bleiben. Also vor dem scanf diese Variablen auf Null setzen.

Ich würde den Input vor dem scanf erst mal manuell parsen, also testen, wieviele Parameter eingegeben wurden. Einfachste Lösung : Anzahl der Blanks bzw. der mathematischen Operatoren zählen. Damit schliesst man zwar keine inkorrekte Syntax aus, aber besser als gar nichts).

Dann würde ich anstatt der vielen "if" Bedingungen "if", "else if", "else" benutzen, um auf goto verzichten zu können.

Kommentar von Markus17 ,

Ähm, erst mal danke für deine Antwort, werde das versuchen.

Kommentar von ralphdieter ,

Einfachste Lösung : Anzahl der Blanks bzw. der mathematischen Operatoren zählen

Noch einfacher: Den Rückgabewert von scanf() prüfen :-)

Kommentar von Markus17 ,

Habe das ganze jetzt noch einfacher gelöst. Ich frage ja den zweiten eingegebene Wert auf ein Rechenzeichen ab. wenn ich also jetzt den ersten eingegebenen Wert abfrage und keine Zahl zurück geliefert bekommen, beende ich meine Anwendung.

Antwort
von Ichmagpaketbode, 35

Ders siehht aus ie ein bruchstück von einer wieese die nur darauf wartet befruchtet zu tun werdern,

Kommentar von DaWannaBe ,

Lustig! Das werde ich in Zukunft auch sagen.

Keine passende Antwort gefunden?

Fragen Sie die Community