Noch schlimmere Einschlaffrage: String auffüllen

Gast #2244612
Lesenswert?

Es lässt mir keine Ruhe:

Eine Funktion wird aufgerufen, die bestimmte Daten an eine bestimmte 
Postiton im Terminal wiedergeben soll.
Hier nur wichtig: Positionswerte int x und int y.

Möchte also die int´s in asciis wandeln (klappt schon) und an Stelle von 
x und y im String einfügen. Wie geht das, wenn die Werte zB zweistellig 
sind?


char string[] = {'\e','[', x ,';', y ,'H','\0'};
#2244708
Lesenswert?

> char string[] = {'\e','[', x ,';', y ,'H','\0'};

Du brauchst ein C-Buch!

Stringverarbeitung ist die erste große Hürde in der C-Programmierung. 
Ohne Anleitung wird das nichts.

In der Zwischenzeit, bis du dein Buch hast, kannst du hier die absoluten 
Basics nachlesen.

http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

1
   char tmp[10];
2
   char result[20];
3

4
   strcpy( result, "\e[" );
5

6
   itoa( tmp, x, 10 );
7
   strcat( result, tmp );
8

9
   strcat( result, ";" );
10

11
   itoa( tmp, y, 10 );
12
   strcat( result, tmp );
13

14
   strcat( result, "H" );


Nachdem du Stringverarbeitung einigermassen gemeistert hast, warten noch 
viele andere Hürden in der C-Programmierung auf dich. Daher brauchst du 
ein vernünftiges Buch, denn keiner hat hier Lust, dir in endlosen 
Postings das beizubringen, was du in jedem Buch auf 25 Seiten 
ausführlichst auch selber nachlesen kannst.
Gast #2244896
Lesenswert?

Wird beherzigt.

Das x und y in
> char string[] = {'\e','[', x ,';', y ,'H','\0'};
habe ich jedoch nur als Platzhalter eingefügt ohne Hoffnung auf 
Klappung. Meine Hoffnung war, den gesamten string in einer Zeile 
schreiben zu können, da noch vieleviele weitere dieser strings für den 
gesamten Bildschirminhalt dazukommen.
Moderator Persönliche Seite #2244948
Lesenswert?

Thorsten ". schrieb:
> Meine Hoffnung war, den gesamten string in einer Zeile
> schreiben zu können, da noch vieleviele weitere dieser strings für den
> gesamten Bildschirminhalt dazukommen.

Soll das ein µC- oder ein PC-Programm werden? Das sieht nach einer 
Ansteuerung/Cursorpositionierung eines ANSI/VT100/VT200-kompatiblen 
Terminals aus...

Auf einem PC kannst Du ohne Gewissensbisse einfach:

  printf ("\e[%d;%dH", x, y);

aufrufen, das sollte Deinen Cursor an die richtige Stelle setzen ;-)

Auf einem µC empfiehlt sich dann die Verwendung von sprintf() (mit 
entsprechendem Speicherplatzverbrauch) oder die Lösung von Karl Heinz. 
Im letzteren Fall würde ich an Deiner Stelle entsprechende Funktionen 
schreiben, die die Terminal-Steuerung abdecken, wie zum Beispiel:
1
void gotoxy (uint8_t x, uint8_t y)
2
{
3
   ... // Lösung von Karl Heinz
4
}
5

6
void reverse_on (void)
7
{
8
   strcpy (result, "\e[5m" );
9
   ...
10
}
11

12
void reverse_off (void)
13
{
14
   strcpy (result, "\e[0m" );
15
   ...
16
}

usw. usw.

Vielleicht solltest Du Dir wirklich erstmal ein gutes C-Buch schnappen. 
Stringbearbeitung in C muss man verstehen....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren