Programm mit While Schleife wiederholen

Skyraz00

Grünschnabel
C:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int dez;
    int bin[32];
    int zahl;

    do
    {
        printf("Geben Sie eine Dezimalzahl ein:\n");
        scanf_s("%d", &dez);
       
        if (dez == 0)
        {
            return 0;
        }
       
        for (zahl = 0; dez > 0; zahl++)
        {
            bin[zahl] = dez % 2;
            dez = dez / 2;
        }

        for (; zahl > 0; zahl--)
        {
            printf("%d", bin[zahl - 1]);
        }
       
    } while (dez!=0);
   
}
Hallo,

Ich habe ein Programm geschrieben das mir Dezimalzahlen in Binärzahlen umrechnet.
Jetzt will ich dass sich das Programm so lange immer wiederholt und ich immer wieder neue Dezimalzahlen umrechnen kann bis ich als Dezimalzahl 0 eingebe,
umsetzen kann ich das soweit ich weiß mit einer while Schleife und 0 als Abbruchbedingung.

Das Programm bricht aber immer nach dem ersten durchlauf ab und ich habe leider nicht den Grund dafür gefunden.
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
Man könnte auch sagen, dass du beim Programmdesign ein bisschen doppelt gemoppelt hast. Normal verwendet man bei einer do-while-Schleife die Abbruchbedingung im Schleifenkopf. Hast du wohl auch gemacht, schließlich bricht while ab sobald dez == 0.
Alternativ setzt man die while-Schleife als Endlosschleife auf (aka while(true) ) und verwendet die Abbruchbedingung innerhalb des Schleifenkörpers. Das hast du aber ebenfalls gemacht mit deinem if (dez == 0) -> brich ab. (Bemerkung am Rande: Stilistisch ist es eigentlich schöner dann break; aufzurufen statt return 0;
Ich weiß, macht hier keinen Unterschied, ist ja auch nur ein lieb gemeinter Tipp)

Also Lösung: Entweder du lässt das if drin und machst while (true), oder du schmeißt das if raus - musst dann aber sicherstellen, dass dez am Ende eines "normalen" Durchlaufes nicht 0 ist.

Gruß Technipion