switch case, römische zahlen, while schleife
-
@razor
du kannst eine Endlos-Schleife machenwhile(1) {}
und einreturn
im default-Zweig.oder du setzt im default-Zweig ein Variable (eine andere als a) und testest auf diesen Wert in der while-Bedingung
-
hallo! ich verstehe was du meinst aber ich weis nicht wie ich es auf papier bringen soll sozusagen.
int main () { char a; int b; while(1){ printf("Geben Sie eine roemische Ziffer ein:\n"); scanf("%c",&a); switch (a) { case 'I': printf("Der Dezimalwert der Eingabe ist: 1\n"); break; case 'V': printf("Der Dezimalwert der Eingabe ist: 5\n"); break; case 'X': printf("Der Dezimalwert der Eingabe ist: 10\n"); break; case 'L': printf("Der Dezimalwert der Eingabe ist: 50\n"); break; case 'C': printf("Der Dezimalwert der Eingabe ist: 100\n"); break; case 'D': printf("Der Dezimalwert der Eingabe ist: 500\n"); break; case 'M': printf("Der Dezimalwert der Eingabe ist: 1000\n"); break; default: printf("Abbruch\n"); } } return 0; //oder return 0; oder return 42; oder ... }
-
@razor Jetzt hast du die Endlosschleife.
Erscheint das "Abbruch"?
-
@razor sagte in switch case, römische zahlen, while schleife:
ausgeben ja und dann soll es sich wiederholen, (nur bein römischen ziffern!) bei einem anderen buchstaben oder nummer solls abbbrechen
und das Programm beenden#include <stdlib.h> // EXIT_FAILURE #include <stdio.h> // scanf(), puts() int main(void) { for (;;) { // forever char letter = 0; // initialisieren und damit sicherstellen dasz // keine gueltige Eingabe in letter steht auch // wenn scanf() fehlschlaegt (nicht 1 zurueckgibt) puts("Geben Sie eine roemische Ziffer ein:"); scanf(" %c", &letter); switch (letter) { case 'i': case 'I': puts("Der Dezimalwert der Eingabe ist 1\n"); break; case 'v': case 'V': puts("Der Dezimalwert der Eingabe ist 5\n"); break; case 'x': case 'X': puts("Der Dezimalwert der Eingabe ist 10\n"); break; case 'l': case 'L': puts("Der Dezimalwert der Eingabe ist 50\n"); break; case 'c': case 'C': puts("Der Dezimalwert der Eingabe ist 100\n"); break; case 'd': case 'D': puts("Der Dezimalwert der Eingabe ist 500\n"); break; case 'm': case 'M': puts("Der Dezimalwert der Eingabe ist 1000\n"); break; default: fputs("Sie haben keine roemische Ziffer eingegeben. Bye.\n", stderr); return EXIT_FAILURE; // oder return 0; oder return 42; oder ... } } }
-
@DirkB die schleife funktioniert! aber das abbruch kommt nicht.
btw verdammt ihr seit von der schnellen sorte!
Geben Sie eine roemische Ziffer ein: L Der Dezimalwert der Eingabe ist: 50 Geben Sie eine roemische Ziffer ein: Geben Sie eine roemische Ziffer ein:
so siehts aus
hey @Swordfish! was bedeutet das fputs? bzw wie koennte man die for in ne while unwandeln.. nur zum verständnis
-
@razor sagte in switch case, römische zahlen, while schleife:
was bedeutet das fputs?
file put string
Ausgabe in einen anderen Ausgabestrom als stdout (Standard Out). Hier auf den Standard Fehlerkanal (stderr)bzw wie koennte man die for in ne while unwandeln.
Eine for-Schleife geht
for(Initialisierung;Bedingung;Inkrement) Schleifenkörper
Als while
Initialisierung; while(Bedingung) { Schleifenkörper; Inkrement; }
bei for(;;) ist die Bedingung leer, das ist wie wahr.
-
@razor sagte in switch case, römische zahlen, while schleife:
wie koennte man die for in ne while unwandeln..
for(;;)
~>while (true)
oderwhile (1)
oderwhile (irgendwas_das_nicht_0_ist)
-
@razor Eigentlich müsste bei deinem Programm zwischen Zeile 5 und 6 das Abbruch stehen.
-
ok danke ich werd mir das noch ansehen! dankesehr!
ich möchte mich da einlernen.Geben Sie eine roemische Ziffer ein: ö Abbruch Geben Sie eine roemische Ziffer ein: Abbruch Geben Sie eine roemische Ziffer ein:
ja so sieht die andere variante aus
wie bekomme ich das noch so hin dass es so wie bei @swordfish läuft nur in diesem programm mit der while schleife?ich weis dass ich hier im default zweig die schleife abbrechen möchte ,aber unter rücksichtnahme der while schleife . wie würde es gehen ohne das ich bei #include <stdio.h>
#include <stdlib.h> etwas hinzufüge?#include <stdio.h> #include <stdlib.h> int main () { char a; while(1) { printf("Geben Sie eine roemische Ziffer ein:\n"); scanf("%c",&a); switch (a) { case 'I': printf("Der Dezimalwert der Eingabe ist: 1\n"); break; case 'V': printf("Der Dezimalwert der Eingabe ist: 5\n"); break; case 'X': printf("Der Dezimalwert der Eingabe ist: 10\n"); break; case 'L': printf("Der Dezimalwert der Eingabe ist: 50\n"); break; case 'C': printf("Der Dezimalwert der Eingabe ist: 100\n"); break; case 'D': printf("Der Dezimalwert der Eingabe ist: 500\n"); break; case 'M': printf("Der Dezimalwert der Eingabe ist: 1000\n"); break; default: printf("Sie haben keine roemische Ziffer eingegeben. Bye.\n", stderr); return 0; // oder return 0; oder return 42; oder ... } } return 0; // oder return 0; oder return 42; oder ... }
-
Ähm. Für den letzten Code den Du gezeigt hast brauchst Du
<stdlib.h>
garnicht. Im default-Zweig hast Duprintf()
mit dem Aufruf vonfputs()
in meinem Beispiel vermischt.printf()
printed immer nachstdout
, da kannst Du keinen anderen Stream wiestderr
angeben.
-
ok also stderr mach ich weg, aber wie vervollständige ich das programm mit der der while schleife, was muss ich im default zweig reinschreiben?
default: ?????? printf("Sie haben keine roemische Ziffer eingegeben.\n"); return 0; // oder return 0; oder return 42; oder ...
-
@razor reicht das return nicht?
-
@razor wie wäre es mit
int continue_loop = 1; while(continue_loop) { switch(blabla) { default: continue_loop = 0; break; } }
-
@Wade1234 sagte in switch case, römische zahlen, while schleife:
wie wäre es mit
Das meinte ich im „oder“ Vorschlag.
(aber mit continue_loop = 0; im default)
-
@DirkB sagte in switch case, römische zahlen, while schleife:
@Wade1234 sagte in switch case, römische zahlen, while schleife:
wie wäre es mit
Das meinte ich im „oder“ Vorschlag.
(aber mit continue_loop = 0; im default)
war wohl nicht so verständlich.
ich hatte zuerst "end_loop = 1" und "while(!end_loop)" geschrieben und dann fiel mir ein, dass das irgendwie unsinn ist.
-
@Wade1234 sagte in switch case, römische zahlen, while schleife:
ich hatte zuerst "end_loop = 1" und "while(!end_loop)" geschrieben und dann fiel mir ein, dass das irgendwie unsinn ist.
Hatte ich gesehen, den gleichen Gedanken gehabt.
Ist mir auch schon passiert.
(Hättest du das wortlos korrigiert, hätte ich die Klammer auch gelöscht - oder durchgestrichen )
-
@Wade1234 sagte in switch case, römische zahlen, while schleife:
continue_loop = 0;
ok habs mal eingegeben
```cpp Geben Sie eine roemische Ziffer ein: I Der Dezimalwert der Eingabe ist: 1 Geben Sie eine roemische Ziffer ein: Sie haben keine roemische Ziffer eingegeben. -------------------------------- Process exited after 2.401 seconds with return value 0 Drücken Sie eine beliebige Taste . . .
```cpp int main () { char a; int continue_loop =1; while(continue_loop) { printf("Geben Sie eine roemische Ziffer ein:\n"); scanf("%c",&a); '''' switch (a) { case 'I': puts("Der Dezimalwert der Eingabe ist: 1\n"); break; case 'V': puts("Der Dezimalwert der Eingabe ist: 5\n"); break; case 'X': puts("Der Dezimalwert der Eingabe ist: 10\n"); break; case 'L': puts("Der Dezimalwert der Eingabe ist: 50\n"); break; case 'C': puts("Der Dezimalwert der Eingabe ist: 100\n"); break; case 'D': puts("Der Dezimalwert der Eingabe ist: 500\n"); break; case 'M': puts("Der Dezimalwert der Eingabe ist: 1000\n"); break; default: continue_loop = 0; printf("Sie haben keine roemische Ziffer eingegeben.\n"); break; // oder return 0; oder return 42; oder ... } } return 0; // oder return 0; oder return 42; oder ... }
nur leider gelingt es mir nocht das programm zu wiederholen bei einer römischen zahl
-
@razor sagte in switch case, römische zahlen, while schleife:
nur leider gelingt es mir nocht das programm zu wiederholen bei einer römischen zahl
Das liegt daran, dass du die Hinweise nicht richtig gelesen/umgesetzt hast.
Du kannst ja mal mehrere römische Ziffern direkt hintereinander eingeben MMXDI und am Ende einmal die Entertaste drücken.
Das Zeichen von der Entertaste steht noch im Eingabestrom und wird auch eingelesen, ist jedoch keine römische Ziffer.
Umgehen kannst du das Problem durch das Leerzeichen bei
scanf
(siehe letzte Zeile von meiner ersten Antwort)
-
@DirkB sagte in switch case, römische zahlen, while schleife:
@Wade1234 sagte in switch case, römische zahlen, while schleife:
ich hatte zuerst "end_loop = 1" und "while(!end_loop)" geschrieben und dann fiel mir ein, dass das irgendwie unsinn ist.
Hatte ich gesehen, den gleichen Gedanken gehabt.
Ist mir auch schon passiert.
(Hättest du das wortlos korrigiert, hätte ich die Klammer auch gelöscht - oder durchgestrichen )vielleicht ist das gar nicht so verkehrt, wenn es weiterhin drin steht.
-
hallo es funnzt!
ich habe den hinweis von dir berücksichtigt Dirk, aber durchs herumkobieren und tüfteln usw... is das leerzeichen leider nicht mehr berücksichtigt worden.
zum verständnis
die variable continue_loop ist mit 1 deklariert worden
wird in der while schleife solange wiederholt bis über default die variable auf den wert 0 gesetzt und daurch die schleife nicht mehr wiederholt wird??