Forum: PC-Programmierung fprintf vs. printf


von stefan (Gast)


Lesenswert?

hey zusammen...

ich habe ein programm geschrieben, dass einen text ver- und 
entschlüsselt. jeder buchstabe wird dabei durch ein wort ersetzt und 
danach ein " " angehängt. jetzt soll ich zwischen 5-15 wörtern einen 
punkt setzen, damit es realistischer wirkt. kein problem - funktioniert 
auch alles so weit mit:
1
printf("%c%c%c", '\b' ,'.', ' ');

es soll aber die option geben, dass es auch in ein outputfile 
geschrieben wird:
1
fprintf(out, "%c%c%c", '\b' ,'.', ' ');
genau da ist das problem, denn das leerzeichen wird hier nicht gelöscht! 
sogar das gegenteil passiert, es wird ein zusätzliches leerzeichen 
eingefügt.

ich hoffe, ihr könnt mir helfen.

lg
stefan

von Peter II (Gast)


Lesenswert?

das glaube ich zwar nicht aber das ganze sieht auch sehr umnständtlich 
aus.

printf("%c%c%c", '\b' ,'.', ' '); -> printf("\b. ");

wozu die Platzhalter %c wenn du eh keine Variablen verwendest.

von Jim M. (turboj)


Lesenswert?

Der Beitrag vom OP ist etwas schwer verdaulich.
Bei Textausgabe mit printf() wird das zueletzt ausgegebene Zeichen mit 
\b gelöscht - um mit einem "." überschrieben zu werden.

Das funktioniert natürlich nur an der Textkonsole. Bei der Ausgabe in 
ein File erzielt man dasselbe Ergebnis mittels fseek():
1
fseek(out, -1, SEEK_CUR);
2
fprintf(out, "%c%c",'.', ' ');

von stefan (Gast)


Lesenswert?

ich bedanke mich für die raschen antworten.

zu meiner verteidigung:
ich programmiere in c seite genau 1 1/2 Tagen und da ist es nicht so 
einfach sich so schnell mit den ganzen methoden zurechtzufinden. war 
schon froh, wenn es irgendwie funktioniert hat :D

von Rolf Magnus (Gast)


Lesenswert?

'\b' löscht nichts, sondern gibt halt den Zeichencode für ein Backspace 
aus. Was damit gemacht wird, hängt davon ab, wohin es gesendet wird. In 
die Datei wird es halt einfach als solches reingeschrieben. Was dann 
damit passiert, hängt wiederum von dem Programm ab, mit dem du die Datei 
anzeigst.

von Karl H. (kbuchegg)


Lesenswert?

Jim Meba schrieb:

> Das funktioniert natürlich nur an der Textkonsole. Bei der Ausgabe in
> ein File erzielt man dasselbe Ergebnis mittels fseek():
>
1
fseek(out, -1, SEEK_CUR);
2
> fprintf(out, "%c%c",'.', ' ');

Oder aber man schreibt das bewusste Leerzeichen erst gar nicht, dann 
braucht man es auch nicht löschen.

Die AUfgabenstellung läuft doch letzten Endes darauf hinaus, dass 
abhängig von einem Zähler einmal ein Leerzeichen geschrieben wird und 
wenn der Zähler eine Zahl zwischen 5 und 15 erreicht het, wird kein 
Leerzeichen geschrieben sondern ein '.'

-> ein simples if zur Fallunterscheidung. Man darf nur nicht zu faul 
sein, einen printf auf 2 aufzubrechen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.