Ich komme nicht aus meiner Schleife heraus



  • Erst mal danke für die schnelle Hilfe, denn damit hatte ich nicht gerechnet.
    Im Übrigen scheint das aber wohl nicht mein einziger Fehler zu sein, denn die Schleife, ob for- oder while-, bricht nicht ab. Selbst dann, wenn ich für char etwas anderes als die gewählten Bedingungen eingebe.
    Da muss ich wohl oder übel anfangen zu sezieren.

    Ich glaube jetzt habe ich es mit der Code-Anzeige....

    while(r=='s'||r=='r'||r=='p'||r=='='||r=='u';)
    


  • Sepas schrieb:

    Erst mal danke für die schnelle Hilfe, denn damit hatte ich nicht gerechnet.
    Im Übrigen scheint das aber wohl nicht mein einziger Fehler zu sein, denn die Schleife, ob for- oder while-, bricht nicht ab. Selbst dann, wenn ich für char etwas anderes als die gewählten Bedingungen eingebe.
    Da muss ich wohl oder übel anfangen zu sezieren.

    Ich glaube jetzt habe ich es mit der Code-Anzeige....

    while(r=='s'||r=='r'||r=='p'||r=='='||r=='u';)
    

    Entferne mal das ;



  • Keine Ahnung ob dein Quelltext hier exakt dem auf deinem Rechner entspricht?

    Hast du in den letzten beiden Zeilen break und ) vertauscht?



  • Und das Minimalbeispiel währe folgendes:

    #include<iostream>
    #include<conio.h>
    
    using namespace std;
    int main();
    {
    	char r;				//Als Bedingung der while-Schleife
    	float Widerstand;
    	float Rr=0;			//Summe der Reihenwiderstände
    	float Rp=0;			//Summe der Parallelwiderstände
    	float Rz=0;			//Summe aus Rr & Rz
    
    	cout<<"Herzlich Wilkommen!\nBitte druecken sie (S)tart\n";
    	cin>>r;
    	cout<<"Bitte geben sie ihre Widerstaende ein\n";
    	cout<<"Beispieleingabe: (p20) fuer 20 Ohm parallel-"
    		  "/ (r20) fuer 20 Ohm Reihenwiderstand\n";
    	cout<<"Druecken sie (u) zum umkehren eines Wertes\n";
    	cout<<"Eingabe von = zeigt das Zwischenergebnis an\n";
    
    	while(r=='s'||r=='r'||r=='p'||r=='='||r=='u';)
    	{
    		cin>>r;
    		else				{ break;}		
    		if(r=='=')			{
    							  if(Rp==0)				{Rz+=Rr;}
    							  else if(Rp>=0)		{Rz+=(Rr+(1/Rp));}
    
    							  cout<<Rz<<" Ohm\n";
    							  Rg+=Rz;
    							  Rp=Rp-Rp;
    							  Rr=Rr-Rr;
    							  cin>>r;
    							}
    		else if(r=='u')		{ Rp=Rz=1/Rz;	cin>>r;}
    
    		cin>>Widerstand;
    
    		if(r=='p')			{ Rp+=1/Widerstand; }
    		else if(r=='r')		{ Rr+=Widerstand; }
    
    	}	
    	cout<<Rz<<" Ohm";
    
    		system("Pause");
    
    		return 0;
    
    }
    


  • Diese Klammer

    }
    

    sollte das sein. 🙄



  • Ich kann mich mit deiner Quelltext-Formatierung nicht anfreunden:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char sel;
        cout << "bitte waehlen: ";
    
        switch(sel=6)
        {
        case 6:
    
            char r; //Als Bedingung der for-Schleife
            float Widerstand;
            float Rr=0; //Summe der Reihenwiderstände
            float Rp=0; //Summe der Parallelwiderstände
            float Rz=0; //Summe aus Rr & Rz
            float Rg=0; //Summe aus ?
    
            cout<<"Herzlich Wilkommen!\nBitte druecken sie (S)tart\n";
            cin>>r;
            cout<<"Bitte geben sie ihre Widerstaende ein\n";
            cout<<"Beispieleingabe: (p20) fuer 20 Ohm parallel-"
                "/ (r20) fuer 20 Ohm Reihenwiderstand\n";
            cout<<"Druecken sie (u) zum umkehren eines Wertes\n";
            cout<<"Eingabe von = zeigt das Zwischenergebnis an\n";
    
            for(; r=='s'||r=='r'||r=='p'||r=='='||r=='u';)
            {
                cin>>r;
    
                if(r=='=')
                {
                    if(Rp==0)
                    {
                        Rz+=Rr;
                    }
                    else if(Rp>=0)
                    {
                        Rz+=(Rr+(1/Rp));
                    }
    
                    cout<<Rz<<" Ohm\n";
                    Rg+=Rz;
                    Rp=Rp-Rp;
                    Rr=Rr-Rr;
                    cin>>r;
                }
                else if(r=='u')
                {
                    Rp=Rz=1/Rz;
                    cin>>r;
                }
    
                cin>>Widerstand;
    
                if(r=='p')
                {
                    Rp+=1/Widerstand;
                }
                else if(r=='r')
                {
                    Rr+=Widerstand;
                }
                else
                {
                    break;
                }
            }
            cout<<Rz<<" Ohm";
            break;
        }
    }
    


  • Was ist denn verkehrt?



  • Deine Einrückung ist nicht falsch, dem Compiler ist das sowieso egal, aber etwas sagen wir gewöhungsbedürftig. Ich würde mir an deiner Stelle einen der üblichen Stile angewöhnen, das Internet sagt sicher mehr wenn man danach sucht. Auf jeden Fall konsequent nur einen Stil, nicht mischen. Bei dir sind die Zeilen 47 & 50 zu weit rechts.

    Dein Minimalbeispiel hat mehrere Probleme. Nochmal, aktiviere die Warnungen vom Compiler und beachte diese!
    -kein ; nach main() (nur nach Funktionsprototypen)
    -; in der while-Schleife ist falsch
    Den Rest lass ich dich selber lösen, durch den ungewöhnlichen Einrückungsstil ist es etwas schwer den Code nachzuvollziehen (ja, ich könnte den Code durch ein Formatierungstool laufen lassen).

    f.cpp: In function 'int main()':
    f.cpp:25:9: error: 'else' without a previous 'if'
    f.cpp:31:31: error: 'Rg' was not declared in this scope
    f.cpp:47:23: error: 'system' was not declared in this scope
    


  • Vielen Dank, ich mache mich dann direkt mal an die Arbeit...
    und den Formatierungsstil^^
    Bis dann



  • Ach und die Warnungen habe ich auch schon gefunden und auf W3 gestellt.
    Die Einstellung kannte ich bis dato noch nicht.


Anmelden zum Antworten