Rechteck mit C programmieren?

3 Antworten

Könntest Du mit printf machen.


Silvi445 
Fragesteller
 13.07.2021, 15:32

Wie genau?

0
Silvi445 
Fragesteller
 13.07.2021, 15:34
@Drakon135

bisschen kann ich schon aber bin nicht die beste

0
Drakon135  13.07.2021, 15:36
@Silvi445

Aber dann kennst Du den Grundaufbau. Baue Einfach Zeile für Zeile in der int main() mit printf. Die Rechteckteile bekommst Du aus dem ASCII-Code. Da gibts Tabellen für.

0
Silvi445 
Fragesteller
 13.07.2021, 15:37
@Drakon135

ich danke dir. Wie kann ich aber den Text in der Mitte schreiben?

0
Drakon135  13.07.2021, 15:38
@Silvi445

In dem Du ihn einfach schreibst. Wie gesagt, Du musst es Zeile für Zeile aufbauen. In einer Zeile steht dann am Anfang ein Rechteckzeichen und dann kommt der Text aus der Zeile und dann wieder ein Rechteckzeichen.

1
Drakon135  13.07.2021, 15:43
@Silvi445

printf("[Rechteckz] Dies ist ein [Rechteckz]");

Ich kann am Handy kein ASCII-CODE einfügen. Den musst Du im Beispiel bei [Rechteckz] einfügen.

1

Mir ist immer noch langweilig :)

#include <stdio.h>
#include <string.h>


/* Textzeilen in einem Rechteck ausgeben.
   lines enthält die einzelnen Zeilen und endet mit NULL.
 */
static void printRect ( char const * const * lines )
{
    /* maximale Zeilenlänge (für die Breite der Box): */
    int width = 0;
    for ( char const * const * line=lines; *line; ++line )
        if (width<strlen(*line) )
            width=strlen(*line);

    /* 1. Oberkante ("╔════════···═══════╗"): */
    printf("╔═");
    for ( int i=0; i<width; ++i )
        printf("═");
    printf("═╗\n");

    /* 2. Textzeilen ("║ bla bla blubber ║")
       mit Leerzeile davor und danach: */
    printf("║ %-*s ║\n", width, "");
    for ( char const * const * line=lines; *line; ++line )
        printf("║ %-*s ║\n", width, *line);
    printf("║ %-*s ║\n", width, "");

    /* 3. Unterkante ("╚═══════···═══════╝"): */
    printf("╚═");
    for ( int i=0; i<width; ++i )
        printf("═");
    printf("═╝\n");
}

/* Alle Zeilen von der Kommandozeile ausgeben: */
int main( int argc, char const * const * argv )
{
    printRect(argv+1);
    return 0;
}

Das einzig besondere dabei ist die printf-Formatierung "%-*s":

Das Minus gibt den Text linksbündig aus, und das Sternchen sagt, dass die Mindestbreite der Ausgabe als Argument (hier: width) übergeben wird. Damit sparst Du Dir den Aufwand, hinter den einzelnen Zeilen noch so viele Leerzeichen auszugeben, bis die volle Boxbreite erreicht ist.

Der performanteste Weg wäre den String einfach zu hardcoden und auszugeben.

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops

Silvi445 
Fragesteller
 13.07.2021, 15:35

Ich kann die ASCII Tabelle nutzen ich weiß trotzdem leider nicht wie das geht

0