Komme nicht mehr raus aus der Schleife!
-
Hallo zusammen,
Habe folgenden Code einer Funktion mit einer While Schleife:
int Ent_Vorgang_Direct(void) { char input, offset; printf("Zu verschluesselnter Text: "); while((input=getchar()) != EOF) { if(isalpha(input)) { offset = isupper(input) ? 'A' : 'a'; putchar(offset+((input-offset+13)%26)); } else { putchar(input); } return 0; }
Wenn ich nun ein Wort eingebe wandelt er es mir brav in die Rot13 Verschlüsselung um, bleibt dann aber im "holen" Modus, also er will quasie immer das ich ein Wort eingebe, das er mir dan umwandelt.
Frage: Wie komme ich da nun wieder raus?
Hatte mir vorgestellt das nach jedem Wort, das eingegeben wird, grefragt wird "Wollen Sie noch ein Wort umwandeln (J)a/(N)ein". Weis aber nicht wie ich das hinbekommen soll.
Wäre nett wenn mir einer helfen könnte, Danke!
-
Hi!
Ich kann nur vermuten, kenne mich mit c nicht so sehr aus.
Nun, ich vermute, das getchar ein char liefert. wenn dem so ist, dann kannst du kein char mit einem int (was EOF ist) vergleichen => char immer ungleich EOF
-
getchar() liefert int
also speichere den wert in einem int und schon kannst du auf EOF (meistens -1) vergleichen.
-
Hallo nochmal,
Habe es jetzt so gemacht aber leider funktioniert es immer noch nicht.
Hat vieleicht einer noch eine Idee?int Ent_Vorgang_Direct(void) { int input, offset; printf("Zu verschluesselnter Text: "); while((input=getchar()) != EOF) // -1 { if(isalpha(input)) { offset = isupper(input) ? 'A' : 'a'; putchar(offset+((input-offset+13)%26)); } else { putchar(input); } } return 0; }
-
Kenn michmit C auch nich so aus. Aber, was macht Die funktion getchar() eigentlich? MUsst du ein Wort mitr Enter bestätigen? Oder drückst du nur nen Buchstaben ein? oder was? Wenn getchar nur einen Buchstaben liefert, dann versuch doch mal, mit Enter zu beenden. Bei QBasic ist der Code dafür 13, bei C weiß ich nich. musste mal versuchen. Oder du versuchst einfach sowas hier:
while((input=getchar()) != ",")
Weiß nich, beim Komma bricht er dann ab. Vielleicht musst du auch die ANführungszeichen hier nehemn: '.
Weiß´nich. Musst de mal rumprobieren.Gruß, Maxi
-
hm das funktioniert schonmal, er bricht nun ab wenn ich ein komma eingebe.
Wieso bricht er nicht ab wenn ich es so mach:
while((input=getchar()) != '27')
Also das man ESC rücken muss?
-
Das funktioniert eher nicht. "," ist ein Stringliteral, kein Zeichen. Hier wird also ganz scharmlos ein Zeiger mit einem Integer verglichen, was in der Regel keine sinnvollen Ergebnisse liefert. '27' ist hingegen ein Multibyte-Zeichen, was aber das Problem immer noch nicht löst. Escape hat vielleicht den Zeichencode 27, also kann man auch einfach den Rückgabewert von getchar mit 27 vergleichen. Solche Spezialzeichen werden aber recht häufig nicht vom Programm, sondern von der Umgebung ausgewertet.
Der Vergleich mit EOF war korrekt und ist üblich. Der Computer weiß aber leider nicht, wann Du keine Lust mehr hast weiter etwas einzugeben. Das musst Du im sagen, und das geht am Besten (allgemeines Erstaunen) indem Du ein EOF sendest. Das ist leider systemabhängig und damit hier irrelevant :). Unter Unix geht das 'normalerweise' indem Du ein RETURN gefolgt von CRTL+d eingibst, (Win)Dos war (IIRC) CRTL+z.
-
Ja gut in dem ich ctrl^c drücke, aber soll ja ins untermenü zurückkehren *vergessenzuerwähnen* und da liegt das problem, da ich anscheint nicht einfach so rauskomme, weil
Der Computer weiß aber leider nicht, wann Du keine Lust mehr hast weiter etwas einzugeben.
Kann man das nicht irgendwieanders hinbekommen?
-
Such' doch mal in deiner Dokumentation, wie Du ein EOF 'erzeugst'. CRTL+c terminiert bei mir das Programm, nicht die Schleife. Lustig ist auch, die 'EOF-Taste' zu erraten. Dazu verwendest Du am einfachsten folgendes Programm:
#include <stdio.h> int main(void) { int c; while ((c=getchar()) != EOF) ; return 0; }
Andere Möglichkeit, die ja auch schon mehr oder weniger vorgeschlagen wurde: Schönes Endewort ausdenken, mit strcpy vergleichen und dann die Schleife verlassen?
-
Andere Möglichkeit, die ja auch schon mehr oder weniger vorgeschlagen wurde: Schönes Endewort ausdenken, mit strcpy vergleichen und dann die Schleife verlassen?
Würdest du mir dafür ein kleines Code Beispiel geben, bin noch nicht so versiert in C?!
-
Original erstellt von <Laphoo>:
Würdest du mir dafür ein kleines Code Beispiel geben, bin noch nicht so versiert in C?!Das wurde doch schon mit dem Komma erklärt!!
Statt "," nimmst Du also z.B. "ENDE-IM-GELAENDE". Wenn Du jetzt kein' Bock mehr hast, weitere Worte einzutippen im Prog, gibs' Du ENDE-IM-GELAENDE ein, und die Schleife terminiert!
Statt ENDE-IM-GELAENDE würde sich ein QUIT oder EXIT sicher eher anbieten...MfG, Sarge
-
Original erstellt von <Sgt. Nukem>:
Statt "," nimmst Du also z.B. "ENDE-IM-GELAENDE". Wenn Du jetzt kein' Bock mehr hast, weitere Worte einzutippen im Prog, gibs' Du ENDE-IM-GELAENDE ein, und die Schleife terminiert...Aber Stringgleichheit immer mit strcmp() prüfen, nicht mit ==, gelle!?!
-
viel einfacher gets mit:
while((input = getchar()) != 27)
{
}ein druck auf ESC(oder ein ESC char im Buffer ) und wir sind raus
-
Oder du machst es mit
while ((input=getchar()) != '\r') { //..... }
dann muss der Benutzer ENTER drücken.