Texteingabe mit zwei Abbruchbedingungen beenden
-
Hallöle,
ich soll für die Uni ein Pogramm schreiben, dass Text einliest und in einer Datei speichert:
Bitte Text eingeben (Ende mit @ und Return):
Ich bekomme das soweit auch hin, bis auf "Ende mit @ und Return".
Problem: Das Programm soll auch E-Mail Adressen einlesen können.Wie kann ich denn diese 2 "Abbruchbedingungen" unterbringen?
-
Bei einer E-Mail-Adresse werden kaum das @ und das '\n' direkt aufeinander folgen.
Wenn ein '\n'\ kommt musst du schauen ob das vorhergehende Zeichen ein @ ist.
-
Ich komme einfach nicht weiter. Mein Ansatz:
int text; while ((text = fgetc(stdin)!= 13) //13 == \n { putc(text, dateiStream); }
-
Ich vermute ja mal, dass eigentlich gemeint ist, dass in einer Zeile ein einzelnes @ stehen soll, aber die Zeichenfolge @, newline bekommen wir auch leicht gefunden:
char c, lastchar = 0; while((c = getchar()) != EOF && !(c == '\n' && lastchar == '@')) { putc(c, stdout); lastchar = c; }
Und für stdout setzt du deine Datei ein.
-
Danke für deine Antwort!
Wenn ich nun aber z.B:
Dies ist ein Text.
in die Datei schreiben will, schreibt er
Dies ist ein Text.@
-
Reicht dir
putc(lastchar, stdout);
? Dann steht einmal am Anfang ein (unsichtbares) Nullzeichen. Ansonsten wird's ein klein wenig aufwändiger, weil du noch ein paar ifs einbauen müsstest, aber das bekommst du mit dieser Vorgabe und ein bisschen Nachdenken bestimmt selber hin (oder zumindest solltest du es versuchen).
-
Reicht vollkommen, vielen Dank.