Strings bereits während Eingabe prüfen
-
Hi,
hab folgendes programm (auszugsweise) :#include <stdio.h> void main(void) { char text_eingabe[151], text_konvertiert[151]; int i; printf("Geben Sie den zu ver-/entschluesselnden Text ein (ohne Sonder-\n" "zeichen, Umlaute etc.). Der Text darf maximal 150 Zeichen lang\n" "sein. Beenden Sie ihre Eingabe mit #:\n"); scanf("150s", text_eingabe); for (i=0; text_eingabe[i] != '#'; i++) { if (text_eingabe[i] >= 'A' && text_eingabe[i] <= 'Z') { text_konvertiert[i] = text_eingabe[i] + 'a' - 'A'; } else if (text_eingabe[i] == '\n') { text_konvertiert[i] = ' '; } else { text_konvertiert[i] = text_eingabe[i]; } } printf("%s", text_konvertiert); }
nun möchte ich text_eingabe bereits während der eingabe auf das zeichen # prüfen lassen, damit die eingabe abbricht und nicht '\n', also enter.
was muss ich tun? kriegs irgendwie nich hin. bis jetzt stürzt das programm ab, sobald man enter drückt... und '\n' soll ja in ein leerzeichen umgewandelt werden
-
scanf("%150[^#]",text);
liest maximal 150 Zeichen ein und hört auf, wenn es ein '#' entdeckt.
(btw, warum verwendest du nicht tolower anstelle der Umrechnung?
-
haben wir noch nicht beigebracht bekommen... auch nicht [^#]...
würde es da noch andere möglichkeiten geben?
btw [^#] funktioniert hier anscheinend auch nich...
-
ja:
while(pos<=150&&(c=getch()!='#') text[pos++]=c;
(Schnellschuß ;))
Ansonsten würde ich dir mal empfehlen, dich etwas mit den verschiedenen Formatkennungen von scanf und printf zu beschäftigen - gerade Exoten wie "%[...]" sind mitunter äußerst nützlich.
-
das programm stürzt jetzt schon ab, sobald ich nur ein zeichen eingeben will
und den "komilitonen" (ich hasse dieses wort, deswegen kanns auch falsch geschrieben sein), ders schon auf die reihe gebracht hat, den erreich ich nich...
-
#include <stdio.h> void main(void) { char text_eingabe[151], text_konvertiert[151]; int i; printf("Geben Sie den zu ver-/entschluesselnden Text ein (ohne Sonder-\n" "zeichen, Umlaute etc.). Der Text darf maximal 150 Zeichen lang\n" "sein. Beenden Sie ihre Eingabe mit #:\n"); // scanf("150s", text_eingabe); // nix gut kein '%' scanf("%150s", text_eingabe); for (i=0; text_eingabe[i] != '#'; i++) { if (text_eingabe[i] >= 'A' && text_eingabe[i] <= 'Z') { text_konvertiert[i] = text_eingabe[i] + 'a' - 'A'; } else if (text_eingabe[i] == '\n') { text_konvertiert[i] = ' '; } else { text_konvertiert[i] = text_eingabe[i]; } } // printf("%s", text_konvertiert); // auch nix gut ist nicht 0-terminiert text_konvertiert[i]=0; printf("%s", text_konvertiert); // jetzt solls gehen }
-
ja das "%.." hab ich wohl vergessen, aber es hat am eigentlichen problem auch nix geändert... er beendet nich bei # sondern bei 'ENTER' und er gibt auch keinen konvertierten text aus.
-
Bei den ANSI C-funktionen must du immer enter drücken. Vorher wird nichts eingelesen.
Und bei mir wird der String bis vors # ausgegeben (natürlich darf der String kein Leerzeichen enthalten sonst wirds eine Endlosschleife. Naja stürzt sicher bald mit Zugriffsverletzung ab ).