Rahmen um Ausgabe mit printf
-
Hallo alle Zusammen,
Also ich bin totaler Neuling auf dem Gebiet, aber habe eine Frage, ich hoffe die ist nicht allzu schwer bzw blöd zu beantworten:
Ich habe den Folgenden Code-Ausschnitt:
int main() { printf("+---------------------------------+\n|"); printService(MY_ARGUMENT); printf("|\n+---------------------------------+\n"); return 0; }
Dieser Teil: printService(MY_ARGUMENT); gibt mir die Textzeile "Hallo ich bin du" aus, und ich hätte in der Ausgabe jetzt gerne einen Rahmen drum herum.
Einen Rahmen aus ++++++ wäre am besten, aber das spielt ja keine ROlle.
Mein Problem ist folgendes, ich hätte gerne, dass der Rahmen immer die gleiche Breite hat, beispielsweise 40 Pluse (+), der Text im Rahmen ist aber immer unterschiedlich lang, also soll der Text zentriert im Rahmen dargestellt werden.
ist das irgendwie möglich?
Danke schon mal,
greez
-
Auf die Schnelle (geht sicherlich eleganter...)
int printr(char *str, int width) { int i, l; if((l=strlen(str))>width-2) return 0; for(i=0;i<width;i++) putchar('+'); printf("\n+"); for(i=0;i<(width-2-l)/2;i++) putchar(' '); printf("%s", str); for(i=0;i<(width-2-l)/2+(width-2-l)%2;i++) putchar(' '); printf("+\n"); for(i=0;i<width;i++) putchar('+'); putchar('\n'); return l; }
Ist eigentlich nur ein bisschen Rechnerei...
-
Hallo,
danke für deine Hilfe, aber wo muss ich das ganze jetzt einfügen (in die main?), bzw wo muss ich meinen printService(MY_ARGUMENT); einfügen?
stehe grad etwas auf dem schlauch... oder etwas mehr...
danke schon mal,
greez
-
Tut mir Leid, ich hatte die Stelle mit "totaler Neuling" überlesen...
Kurzer Beispielcode:
#include <stdio.h> #include <stdlib.h> #include <string.h> int printr(char *, int); int main() { printr("Test123 Hallo!!!", 30); return 0; } int printr(char *str, int width) { int i, l; //i: zähler, l: länge des strings if((l=strlen(str))>width-2) //string zu groß für die Box? return 0; for(i=0;i<width;i++) //1. Zeile der Box (width pluszeichen) putchar('+'); printf("\n+"); //Neue Zeile und 1 pluszeichen für den linken rahmen for(i=0;i<(width-2-l)/2;i++) //(width-2-l)/2: Anzahl der nötigen Leerzeichen putchar(' '); printf("%s", str); for(i=0;i<(width-2-l)/2+(width-2-l)%2;i++) //bei den Leerzeichen auf der rechten Seite kommt (width-2-l)%2 dazu, falls (width-2-l) ungerade ist putchar(' '); printf("+\n"); for(i=0;i<width;i++) //die letzte Zeile des Rahmens putchar('+'); putchar('\n'); return l; }
Ich hoffe mal, das ist halbwegs verständlich, und du kannst damit was anfangen.
mfg, loose