switch case, römische zahlen, while schleife
-
hallo!
kann mir vlt jemand helfen und mir sagen wie ich folgendes programm (es sollen römische ziffern in dezimalzahlen ausgegebn werden) wenn eine ungültige, (also bei allem anderen als einer römischen ziffer) eingabe getätigt wurde das programm abbricht?lg
helmutint main () { char a while (a=1) { printf("Geben Sie eine roemische Ziffer ein:\n"); scanf(" %c",&a); switch (a) { case 'I' :printf ("Der Dezimalwert der Eingabe ist: 1\n\n"); break; case 'V': printf ("Der Dezimalwert der Eingabe ist: 5\n\n"); break; case 'X': printf ("Der Dezimalwert der Eingabe ist: 10\n\n"); break; case 'L': printf ("Der Dezimalwert der Eingabe ist: 50\n\n"); break; case 'C': printf ("Der Dezimalwert der Eingabe ist: 100\n\n"); break; case 'D': printf ("Der Dezimalwert der Eingabe ist: 500\n\n"); break; case 'M': printf ("Der Dezimalwert der Eingabe ist: 1000\n\n"); break; }fflush(stdin); a++; } return 0; }
-
Schreibe bitte in eine Zeile vor Deinem CodeDanke.```
und in eine Zeile nach deinem Code auch```
. Alternativ markiere Deinen Code und klicke auf das</>
in der Leiste über dem Bearbeitungsfenster. Du kannst Deinen Beitrag nachträglich bearbeiten. Den Menüpunkt "Bearbeiten" findest Du in dem Drei-Punkte-Menü rechts unter Deinem Beitrag.@razor sagte in switch case, römische zahlen, while schleife:
char a while (a=1)
Was soll denn das? Wann bricht diese
while
-Schleife ab?fflush(stdin);
Das Verhalten von
fflush()
auf Inputstreams ist Undefiniert. Lass das bitte.a++;
Weil? Warum machst Du das? Besonders auch im Hinblick auf die "Bedingung" der
while
-Schleife ...@razor sagte in switch case, römische zahlen, while schleife:
wenn eine ungültige, (also bei allem anderen als einer römischen ziffer) eingabe getätigt wurde das programm abbricht?
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: return EXIT_FAILURE; // oder return 0; oder return 42; oder ... }
-
- aktiviere die Warnungen vom Compiler au dier höchsten Stufe.
- beachte die Warnungen und behebe deren Ursache.
- = ist die Zuweisung, kein Vergleich.
Nutze den default-Zweig vom Switch.
Bedenke auch, dass man auf der Tastatur i.A. Kleinbuchstaben eintippt.
Füge vor dem %c beim
scanf
ein Leerzeichen ein " %c"
-
@Swordfish danke für deine Antwort!
char a
while (a=1)Was soll denn das? Wann bricht diese while-Schleife ab?
naja ich hab hier herumversucht aber anscheinend gelingt es mir nicht, oder ist grundlegend falsch.. was stimmt da zbsp niocht?
char a
while (a=1) so hat es zumindest auch funktioniert aber was stimmt hier nicht?ich wollte mit a++
das die schleife sich wiederholt hat sie ja auch, was passt hier den nicht?ich habe das programm einmal geändert
int main () { char a; 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: return 0; // oder return 0; oder return 42; oder ... }
nur schreibt mir der compiler:
[Error] expected declaration or statement at end of input
-
@razor sagte in switch case, römische zahlen, while schleife:
nur schreibt mir der compiler:
[Error] expected declaration or statement at end of inputWenn das der komplette Code ist (glaube ich nicht, denn da fehlen
#include
s fürprintf()
,scanf()
undputs()
), dann fehlt eine schließende geschwungene Klammer am Ende.@razor sagte in switch case, römische zahlen, while schleife:
@Swordfish sagte in switch case, römische zahlen, while schleife:
Was soll denn das? Wann bricht diese while-Schleife ab?
naja ich hab hier herumversucht aber anscheinend gelingt es mir nicht, oder ist grundlegend falsch.. was stimmt da zbsp niocht?
Siehe @DirkB s dritten Punkt.
-
Dieser Beitrag wurde gelöscht!
-
int main () { char a; 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: break; } return 0; // oder return 0; oder return 42; oder ... }
jzt funkts
aber wenn ich das programm wiederholen moechte, nach einer römischen ziffer, wie geh ich dann korrekt mit der while schleife vor ?
-
@razor sagte in switch case, römische zahlen, while schleife:
aber wenn ich das programm wiederholen moechte, nach einer römischen ziffer, wie geh ich dann korrekt mit der while schleife vor ?
Was willst Du? Den Benutzer immer wieder neu eingeben lassen bis er es irgendwann schafft eine Römische Ziffer einzugeben, dann den Dezimalwert der Ziffer ausgeben und das Programm beenden?
-
@Swordfish as willst Du? Den Benutzer immer wieder neu eingeben lassen bis er es irgendwann schafft eine Römische Ziffer einzugeben, dann den Dezimalwert der Ziffer ausgeben
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
-
@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?