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


Anmelden zum Antworten