Problem mit bool initializing



  • Code sollte funktionieren jedoch funktioniert bool nicht

    #include <iostream>
    using namespace std;
    int main(int argc, char** argv) {
    
    	int zahl,count = 0, rest[32]
    	bool go = true;
    	string run;
    	
    
    	
    	while(go == true)
    	{
    		cout <<"Bitte geben Sie die Zahl ein\n";
    		cin >>zahl;
    		for(int i= 0,i<32; i++)
    			{
    				rest[i] = zahl%2
    				zahl = zahl / 2;
    				count++;
    					
    				if(zahl==0)
    				{
    					break;	
    				}
    			}
    			
    			while(cound > 0)
    				{
    				cout << rest[count - 1];
    				count--;
    				}
    			cout <<"Neue Zahl? (y/n)";
    			cin <<run;
    			if(run=="n")
    				{
    				break;
    				}
    			else if(run == "y")	
    				{
    				go = true
    				}
    			else
    				{	
    				cout<<"Fehlerhafte Eingabe. Bitte wiederholen Sie die Eingabe";
    				cout <<"Neue Zahl? (y/n)";
    				cin >> run;
    				}
    				if(run=="n")
    					{
    					break;
    					}
    				else if(run == "y")	
    					{
    					go = true
    					}
    				else
    					{	
    					break;
    					}
    	}
    	
    	
    	cin.get();
    	
    }
    
    
    


  • In Zeile 5 fehlt ein Semikolon.
    In Zeile 15 hast Du ein Semikolon mit einem Komma verwechselt.
    In Zeile 17 fehlt ein Semikolon.
    In Zeile 27 hast Du count und cound verwechselt.
    In Zeile 33 hast Du >> mit << verwechselt.
    #include <string> fehlt.
    In Zeile 40 fehlt ein Semikolon.
    In Zeile 54 fehlt ein Semikolon.

    Möchtest Du deinen Code vielleicht auch vernünftig einrücken?



  • @Swordfish Bei richtigem Einrücken habe ich keine Ahnung, ist der erste "große" Code den ich schreibe

    also bei zb if dann
    if(.....)
    {
    }

    oder
    if(.....)
    _______ {
    ________}

    ?



  • @HeavyStrike sagte in Problem mit bool initializing:

    Bei richtigem Einrücken habe ich keine Ahnung

    Indentation Style. Such dir einen aus und verwende ihn konsistent. Empfehlen würde ich Dir 1TBS - weniger Augenkrebs für andere.

    Das:

    @HeavyStrike sagte in Problem mit bool initializing:

      cout << "Neue Zahl? (y/n)";
      cin >> run;
      if (run == "n")
      {
      	break;
      }
      else if (run == "y")
      {
      	go = true;
      }
      else
      {
      	cout << "Fehlerhafte Eingabe. Bitte wiederholen Sie die Eingabe";
      	cout << "Neue Zahl? (y/n)";
      	cin >> run;
      }
      if (run == "n")
      {
      	break;
      }
      else if (run == "y")
      {
      	go = true;
      }
      else
      {
      	break;
      }
    

    schreit nach einer Schleife die solange läuft, bis die Eingabe "n" oder "y" ist.



  • @Swordfish Danke für deine Hilfe und ich werde es versuchen es in Zukunft besser zu Organisieren.

    Könntest du mir auch noch hiermit helfen?
    das Ergebnis kommt nich richtig raus und ich weiß nicht warum

    #include <iostream>
    #include <cstdlib>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    
    int main(int argc, char** argv) 
    {
    	int i=0, s=0, laenge; 											//i und s für das Array
    	int dezWerte=0;													//um Falsche Ausgaben zu verhindern
    	string HexEingabe;
    	int HexArray[4];												//[4] für die 4 Eingaben/Zeichen
    	int HexVorgabe [4] ={1, 16, 256, 4096};							// 16 hoch 0-3 Ergebnisse
    	cout <<"Hex in Dez - Umrechnung" <<endl;
    	cout <<"Geben Sie Ihre Hexadezimalzahl ein\n";						
    	cin >> HexEingabe;
    	laenge = HexEingabe.length();									//Analyse der Länge für spätere Verwendung
    	cout <<"Laenge" << laenge << endl;
    	for(i=laenge-1; i>=0; i--)										//Beginn des Case
    	{
    		switch (HexEingabe[i])
    		{
    		
    		case'A':
    		case'a': HexArray[s]=10; break;
    		case'B':
    		case'b': HexArray[s]=11; break;
    		case'C':
    		case'c': HexArray[s]=12; break;
    		case'D':
    		case'd': HexArray[s]=13; break;
    		case'E':
    		case'e': HexArray[s]=14; break;
    		case'F':
    		case'f': HexArray[s]=15; break;
    		default : HexArray[s]= HexEingabe[i]-48;
    		}
    	}		
    	cout <<HexArray[s]<<endl;
    	dezWerte = dezWerte+ HexVorgabe[s]*HexArray[s];s = s+1;
    	
    	
    
    cout << endl<< "Ergebnis:" << dezWerte;
    	return 0;
    }
    
    


  • <cstdlib> ist überflüssig, dafür fehlt <string>.
    Welchen Wert hat s? Wo ändert sich der Wert von s.

    Sollte

    dezWerte = dezWerte+ HexVorgabe[s]*HexArray[s];s = s+1;

    vielleicht in eine Schleife?



  • @Swordfish ich komme mit arrays nicht klar , das ist vom Unterricht.
    würde ein Schleife das Problem beheben?
    und wenn ja weiß ich nicht wie ich dort eine schleife richtig anwende

    Danke für die schnellen Antworten, du rettest mein Leben ^^



  • Nochmal: Welchen Wert hat s immer in Deinem switch-Konstrukt?
    Im Prinzip braucht man für die Umrechning einer Hex-Zahl in einem String in eine Dezimalzahl keine Arrays.



  • @Swordfish Dann mache ich das ohne Array, ich habe jedoch keine Ahnung wie.
    Ich weiß auch nicht welchen wert s hat , ich sehe auch keine verwendung dafür bis auf den fakt das es im Array sitzt.



  • @HeavyStrike sagte in Problem mit bool initializing:

    s = s+1;

    Du initialisierst s mit 0 in Zeile 8. Bis zum s = s+1; in Zeile 39 ändert sich s auch nicht. Dh. Du überschreibst in der for-Schleife im switch immer wieder HexArray[0]. So wie Du es Dir gedacht hast wolltest Du wohl eher HexArray[0], HexArray[1], HexArray[2] und HexArray[3] mit den Zahlenwerten füllen, die dem jeweiligem Buchstaben entsprechen.

    @HeavyStrike sagte in Problem mit bool initializing:

    Dann mache ich das ohne Array, ich habe jedoch keine Ahnung wie.

    Eingabe: 1234abcd

    also
    HexEingabe[0] = '1', Stelle 7
    HexEingabe[1] = '2', Stelle 6
    HexEingabe[2] = '3', Stelle 5
    HexEingabe[3] = '4', Stelle 4
    HexEingabe[4] = 'a', Stelle 3
    HexEingabe[5] = 'b', Stelle 2
    HexEingabe[6] = 'c', Stelle 1
    HexEingabe[7] = 'd', Stelle 0

    Für alle i von HexEingabe.length() bis 1:

    Wenn HexEingabe[i - 1] eine Ziffer ist1), '0' davon abziehen:
    HexEingabe[i - 1] -= '0';

    Wenn HexEingabe[i - 1] ein Buchstabe zwischen 'a' und 'f' ist2), 'a' - 10 abziehen:
    HexEingabe[i - 1] -= 'a' - 10;

    Wenn HexEingabe[i - 1] etwas anderes ist ~> Eingabefehler.

    Dann bloß Zusammenzählen mit dem entsprechenden Stellenwert gewichtet:

    decimal += HexEingabe[i - 1] * pow(16, Stelle);

    Stelle bekommst Du durch HexEingabe.length() - i.

    1) Dabei hilft std::isdigit() aus <cctype>.
    2) Eventuell vorher HexEingabe[i] = std::tolower(HexEingabe[i]); damit Groß-/Kleinschreibung keine Rolle spielt.



  • @Swordfish um erlich zu sein muss ich das morgen abgeben mit 4 anderen Umrechnern, 1 klappt durch youtube , wäre es zuviel gefragt von mir wenn du das für mich machen könntest da ich grad kurz vorm Kollaps stehe.

    es tut mir leid damit deine Zeit zu verschwenden......

    ich mache gleich den structorizer dann gebe ich es auf....



  • @HeavyStrike sagte in Problem mit bool initializing:

    um erlich zu sein muss ich das morgen abgeben

    In dem Fall nimm bitte deinen zuletzt geposteten Code, tausche <cstdlib> gegen <string>. Dann packst Du Zeilen 38 und 39 so wie sie sind unter das switch in die for-Schleife. Ist zwar nicht perfekt aber funktioniert für viele Eingaben. Viel Glück.



  • @Swordfish Vielen Dank für deine Hilfe!
    und ein Gute Nacht 😞



  • @HeavyStrike sagte in Problem mit bool initializing:

    😞

    Nicht den Kopf hängen lassen. Mach jetzt hinne und probiers aus. Wenns nicht tut Zeig nochmal deinen Code.



  • @Swordfish Die Ausgabe sieht so aus:
    Sie haben den Umwandler Von Hexadezimal zu Dezimal ausgewaehlt
    Hex in Dez - Umrechnung
    Geben Sie Ihre Hexadezimalzahl ein
    1b
    Laenge2
    11
    1
    67

    Ergebnis:17179

    Process exited after 2.532 seconds with return value 0
    Drücken Sie eine beliebige Taste . . .

    code ist derzeit (Empfehlung es ist in case 3, damit du nicht suchen musst):

    #include <iostream>
    #include <cstdlib>
    #include <String>
    using namespace std;
    
    int main(int argc, char** argv) 
    {
     char Antwort;
     int zahl;
     int count = 0, rest[32];
     						
    //---------Ausgabe der Vorinformationen-------------------------------
    cout <<"Dies ist der Multiumrechner."<<endl ;
    cout <<"Waehlen sie Ihre gewuenschte Umrechnungsart aus.";
    cout <<"\nVon Dezimal zu Hexadezimal 	: 1" << endl;
    cout <<"Von Dezimal zu Binaer      	: 2" << endl;
    cout <<"Von Hexadezimal zu Dezimal 	: 3" << endl;
    cout <<"Von Hexadezimal zu Binaer  	: 4" << endl;
    cout <<"Von Binaer zu Hexadezimal  	: 5" << endl;
    cout <<"Von Binaer zu Dezimal     	: 6\n \n \n" << endl;
    cout <<"Bitte geben sie Ihre Antwort ein"<< endl;
    //-------- EInelesen der Antwort---------------------------
    cin >>Antwort;
    //----------------Switch zur Antwortsunterscheidung----------------------------
    switch(Antwort)
    {
    //***********Von Dezimal zu Hexadezimal    ****************
    	case'1':
    	{
    		system("cls");
    		cout << "\nSie haben den Umwandler ``Von Dezimal zu Hexadezimal`` ausgewaehlt";
    
        	cout << "\n\n\nBitte geben Sie eine Dezimal Zahl ein: ";
       		cin >> zahl;
       		
        
       	 // Berechnung / Ausgabe Hexadezimal
      		cout << "Umgerechnet in eine Hexadezimal Zahl lautet diese: "; 
       		cout << endl;
       		while (zahl!=0) 
    		{
           		cout << (zahl%16) <<endl;
            	zahl = zahl / 16;
        	}    
            
    	}
    		break;
    
    //*********** Von Dezimal zu Binaer   ****************
    
    	case'2':
    		{
    		system("cls");										//Leeren der Bildschirmes
    		cout <<"\nSie haben den Umwandler ``Von Dezimal zu Binaer`` ausgewaehlt"<< endl;				//Titel der gewaehlten Option
    	//--------Integer----------	--------------------------	
    	
    	bool go = true;
    	string run;
    	
    
    	
    	while(go == true)										//Beginn der Schleife
    	{
    		cout <<"Bitte geben Sie eine Dezimalzahl ein\n";
    		cin >>zahl;
    //-----------Schleifenbeginn-----------------
    		for(int i= 0;i<32; i++)                               //Bedingung der Berechnung
    			{
    				rest[i] = zahl%2;
    				zahl = zahl / 2;
    				count++;
    					
    				if(zahl==0)									// Outbreak aus der Schleife
    				{
    					break;	
    				}
    			}
    //-----------Schleifenbeginn fuer Berechnung-----------------
    			while(count > 0)								//Zaehler
    			{
    				cout << rest[count - 1];
    				count--;
    			}
    			cout <<"\nNeue Berechnung? (y/n)";				//abfrage
    			cin >>run;
    			if(run=="n")
    			{
    				break;
    			}
    			else if(run == "y")	
    			{
    				go = true;
    			}
    			else
    			{	
    				cout<<"Fehlerhafte Eingabe. Bitte wiederholen Sie die Eingabe";				// Bei Fehlerhaften Einagebe
    				cout <<"\nNeue Berechnung? (y/n)";
    				cin >> run;
    			}
    			if(run=="n")
    			{
    				break;
    			}
    				else if(run == "y")	
    				{
    					go = true;
    				}
    				else
    				{	
    					break;
    				}
    	}
    	
    	
    	cin.get();
    		}
    		break;
    		
    //*********** Von Hexadezimal zu Dezimal   ****************
    				
    	case'3':
    		{
    			system("cls");										//Leeren der Bildschirmes
    			cout <<"\nSie haben den Umwandler ``Von Hexadezimal zu Dezimal`` ausgewaehlt"<< endl;				//Titel der gewaehlten Option
    			int i=0, s=0, laenge; 											//i und s f¨¹r das Array
    			int dezWerte=0;													//um Falsche Ausgaben zu verhindern
    			string HexEingabe;
    			int HexArray[4];												//[4] f¨¹r die 4 Eingaben/Zeichen
    			int HexVorgabe [4] ={1, 16, 256, 4096};							// 16 hoch 0-3 Ergebnisse
    			cout <<"Hex in Dez - Umrechnung" <<endl;
    			cout <<"Geben Sie Ihre Hexadezimalzahl ein\n";						
    			cin >> HexEingabe;
    			laenge = HexEingabe.length();									//Analyse der L?nge f¨¹r sp?tere Verwendung
    			cout <<"Laenge" << laenge << endl;
    			for(i=laenge-1; i>=0; i--)										//Beginn des Case
    				{
    					switch (HexEingabe[i])
    						{
    		
    							case'A':
    							case'a': HexArray[s]=10; break;
    							case'B':
    							case'b': HexArray[s]=11; break;
    							case'C':
    							case'c': HexArray[s]=12; break;
    							case'D':
    							case'd': HexArray[s]=13; break;
    							case'E':
    							case'e': HexArray[s]=14; break;
    							case'F':
    							case'f': HexArray[s]=15; break;
    							default : HexArray[s]= HexEingabe[i]-48;
    						}
    					cout <<HexArray[s]<<endl;
    					dezWerte = dezWerte+ HexVorgabe[s]*HexArray[s];s = s+1;	
    				}		
    			cout <<HexArray[s]<<endl;
    			dezWerte = dezWerte+ HexVorgabe[s]*HexArray[s];s = s+1;
    	
    	
    
    			cout << endl<< "Ergebnis:" << dezWerte;
    		}
    		break;
    
    //*********** Von Hexadezimal zu Binaer   ****************
    		
    	case'4':
    		{
    						
    		
    		cout<<"Antwort"<<endl;	
    		
    		
    		
    		}
    		break;
    		
    //*********** Von Binaer zu Hexadezimal   ****************
    		
    				
    	case'5':
    		{
    						
    		
    		
    		cout<<"Antwort"<<endl;	
    		
    		
    		}
    		break;
    			
    //*********** Von Binaer zu Dezimal   ****************
    				
    	case'6':
    		{
    						
    		
    		cout<<"Antwort"<<endl;	
    		
    		
    		
    		}
    		break;
    
    
    
    }
    	
    }
    


  • @Swordfish sagte in Problem mit bool initializing:

    Dann packst Du Zeilen 38 und 39 so wie sie sind unter das switch in die for-Schleife.

    Damit war gemeint verschieben, nicht kopieren.



  • @Swordfish oops , habe die kopie von zeile 157 und 158 entfernt

    jetzt die Ausgabe :
    Sie haben den Umwandler Von Hexadezimal zu Dezimal ausgewaehlt
    Hex in Dez - Umrechnung
    Geben Sie Ihre Hexadezimalzahl ein
    1b
    Laenge2
    11
    1

    Ergebnis:27



  • @HeavyStrike sagte in Problem mit bool initializing:

    Ergebnis:27

    Na, das stimmt doch 👍



  • @Swordfish Vielen Dank für deine Hilfe und deine Geduld
    Mir Fehlen noch 3 Umrechner, jedoch schreibe ich morgen zeitgleich ne Klausur und brauche Schlaf (nach dem Structorizer)
    also beende ich das Structogramm und gehe schlafen.

    Vielen Dank, mit Glück rettet das meine Note!



  • @Swordfish Oder haste zufälligerweise nen mit Grundkenntnissen geschriebennen Rechnern rumliegen:
    Hex zu Binär
    Binär zu Hex
    Binär zu Dezimal


Anmelden zum Antworten