Binarausgabe Null zuviel!



  • Hey

    Ich habe ein Programm das eine Dezimalzahl in Binärumwandeln soll nur krieg ich am anfang eine Null zu viel wen ich alles ausgebe.

    #include <iostream>
    using namespace std;
    
    int input=0,counter=0;
    int bin[99];
    
    int main() {
    
        for(unsigned int i = 0; i < 100; i++) {
          bin[i] = 0;
        }
    
        cout << "Eingabe : ";
        cin >> input;
        do{
          bin[counter] = input % 2;
          input = input / 2;
          counter += 1;
        }while(input > 0);
    
        for(int i = counter;i >= 0; i--) {
          cout << bin[i];
        }
    
        cout << endl;
    
        return 0;
    
    }
    

    Der Code ist sehr einfach deshalb lass ich das erklären hier mal.

    Also wen ich z.B. 12 eingebe sollte 1100 rauskommen doch ich bekommme 01100 raus hat einer eine Idee wie ich das hinbekomme.

    Danke im vorraus !



  • In der Schleife

    do{
          bin[counter] = input % 2;
          input = input / 2;
          counter += 1;
        }while(input > 0);
    

    wird überprüft, ob input >0 ist.
    Was meinst du, was passiert, wenn input 1 ist und durch 2 dividiert wird?
    Ja genau, dann hast du 0. Die zählst du im counter mit, was nicht gewünscht ist.
    Darum:

    do{
          bin[counter] = input % 2;
          input = input / 2;
          if(input>0)              //Abfrage, ob 0 ist
              counter += 1;        //counter++ ist besser             
        }while(input > 0);
    


  • Also für mich sieht es so aus, als sei der Fehler bei der Ausgabe

    Chrome schrieb:

    for(int i = counter;i >= 0; i--) {
          cout << bin[i];
        }
        cout << endl;
    

    müsste eigentlich

    for(int i = counter; i>0;) {
          --i;
          cout << bin[i];
        }
        cout << endl;
    

    heißen.



  • Chrome schrieb:

    int bin[99];
    
    ...
      
        for(unsigned int i = 0; i < 100; i++) {
          bin[i] = 0;
        }
      
    ...
    }
    

    Achtung: Range-overflow. "i" läuft bis 99 und bin[99] ist außerhalb des Arrays.


Anmelden zum Antworten