Nach Schleife zurück zum Anfang?
-
Servus miteinander,
ich bearbeite gerade einen aufbauenden Teil einer Aufgabe.
Und je mehr ich damit nun arbeite, desto mehr stehe ich auf dem Schlauch...
Ich hoffe hier vielleicht einen Denkanstoß zu bekommen.Und zwar war die Aufgabe 1) einen Rechner von Dezimal > Binärzahlen in C zu programmieren.
Nun folgte Teil 2), dieser soll immer wieder nach einer Umrechnung fragen, bis eine negative Zahl eingegeben wird (Abbruchbedingung).#include <stdio.h> int main(void) { int zahl, dezimal, rest, ergebnis=0, faktor=1; while (1) { printf("\n\nBitte geben sie die Zahl ein, die ins binaere Zahlensystem konvertiert werden soll:"); scanf("%d", &dezimal); if (dezimal > 0) while (1) { zahl=dezimal; rest = dezimal % 2; dezimal = dezimal / 2; ergebnis = ergebnis + rest * faktor; faktor = faktor * 10; printf ("\n%d als binaere Zahl: %d\n\n", zahl, ergebnis); } else { printf("Falsche, da negative Eingabe:nProgrammabbruch.\n\n"); return 0; } } }
Mit meiner ersten Schleife while(1), welche ja immer gültig ist, wird mein Programm ja immer wieder abgearbeitet.
Wird eine negative Zahl eingegeben, greift die else Anweisung und es wird ein Programmabbruch herbeigeführt. (So soll es ja sein)
Nun komme ich aber einfach nicht drauf, wie ich die innere Schleife korrekt abwickel.
Gebe ich eine positive Zahl ein, greift ja die if Anweisung (dezimal > 0).Darunter dann die while Schleife.
Mir ist natürlich bewusst, das der Ausdruck (1) hier für eine unendliche Schleife sorgt.
Genau hier stehe ich komplett auf dem Schlauch.
Denn die innere Schleife wird ja nicht nur 1x durchlaufen, sondern es wird ja solange die Berechnung Dez>Bin durchgeführt, bis diese beendet ist.
Ansonsten könnte ich ja einfach ein "break" setzen....Hat hier jemand vielleicht einen Denkanstoß für mich?
Vielen Dank
-
ergebnis
undfaktor
vor jeder Bearbeitung neu setzen,do{...}while()
-Schleife im Berechnungsblock verwenden, der prüft, ob die letzte Bearbeitung einen Input von 1 hatte (was das heißt, lasse ich dich schön selbst herausfinden) und die Ausgabe aus der Schleife nehmen und stattdessen nach derdo{...}while()
-Schleife setzen?Der Code als solcher stinkt mir allerdings.
-
Wann ist denn die Berechnung Dez>Bin beendet?
Woran erkennst du das?
-
Deine innere while-Schleife ist falsch, bzw. deren Abbruchbedingung.
Benutze Funktionen und die Übersichtlichkeit steigt enorm.
-
ergebnis = ergebnis + rest * faktor;
Was kommt da wohl raus wenn ich 2 eingebe?
EDIT:
Musste Fußball kucken.
Ich denke, ich hab schon früher gezeigt, wie man das einigermaßen elegant in einem Einzeiler löst.
Nutze einfach die Suchfunktion des Forums.
-
musst du das denn überhaupt richtig ausrechnen? ansonsten wäre ein programm der art doch schneller, besser usw.
int main() { //variablen //benutzerabfragen for(i=0;i<32;i++) { printf("%d",(zahl>>31-i)&1); }
wenn du es wirklich selbst ausrechnen musst, wirst du nicht drum herum kommen, die zwischenergebnisse in einem array o.ä. abzuspeichern und dann am schluss das ganze array auszugeben.
-
while(1) { ... } else { ... }
Grrr
Was soll while/else sein?
Denkanstoss: Mache dich mit den verschiedenen Schleifen-Konstrukten vertraut!
Ansonsten schon gesagt: do/while ist zu empfehlen.
-
er hat da ein if-else im code und dann ausgenutzt, dass bei "einzeiligen" anweisungen keine klammern verwendet werden müssen.
ist also schon in ordnung so.
-
HansKlaus schrieb:
er hat da ein if-else im code und dann ausgenutzt, dass bei "einzeiligen" anweisungen keine klammern verwendet werden müssen.
Und dann den Code so formatiert, dass man es falsch lesen muss.
ist also schon in ordnung so.
Nein.
-
Da muss ich SG1 schon Recht geben:
Spare nie an Klammern und auch nicht an Einrückungen.
-
HansKlaus schrieb:
er hat da ein if-else im code und dann ausgenutzt, dass bei "einzeiligen" anweisungen keine klammern verwendet werden müssen.
ist also schon in ordnung so.
Und er hat wieder zugeschlagen! HansKlaus, bitte verschone die Welt mit deinem blamablen Halbwissen!
-
HänschenKläuschen schrieb:
HansKlaus schrieb:
er hat da ein if-else im code und dann ausgenutzt, dass bei "einzeiligen" anweisungen keine klammern verwendet werden müssen.
ist also schon in ordnung so.
Und er hat wieder zugeschlagen! HansKlaus, bitte verschone die Welt mit deinem blamablen Halbwissen!
Er hat es doch richtig, wenn auch etwas holperig, beschrieben.
Und das "ist also schon in ordnung so" interpretiere ich als seine persönliche Meinung.
-
Andromeda schrieb:
Und das "ist also schon in ordnung so" interpretiere ich als seine persönliche Meinung.
das ist nicht meine persönliche meinung, das ist die sprachsyntax von c.
und: am besten einfach ignorieren.