Komme nicht mehr raus aus der Schleife!
-
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.