Eingabefunktion kommt mit gotoxy() positionierung nicht klar [Absoluter Anfänger]
-
Hallo Zusammen,
ich schreibe derzeit an einem einfachen win32 Konsolenprogramm das mehrere Eingabefelder hat. Diese möchte ich mit den Pfeiltasten ansteuren. Dazu habe ich mir eine Eingabefunktion geschrieben die, die Funktions und Pfeiltasten von den normalen eingabetasten unterscheidet. Ich habe für jeden Eingabepunkt einen eigenen String erstellt an dem dann bei jeden Tastendruck ein Zeichen hinzugefügt.
Bei Druck auf Return löscht er von dem gerade aktiven String ein Zeichen.
Der Code sieht so aus:#include <conio.h> #include <stdio.h> #include <string.h> int anzahl=1; //Zahl muss der Anzahl von point entsprechen!!! struct ein //Aktuelle Eingabe Position vom Cursor ist vielleicht noch nützlich { int pos;//ist zur bestimmung des momentan aktiven punktes }temps; struct punkt //Eingabepunkte { int x; int y; char temp[]; }; struct punkt point[2]; int eingabe() //Eingabefunktion { char bs; do { fflush(stdin); if(kbhit()) { bs=getch(); if (bs==0)//Filterung der Funktions und Pfeiltasten { bs=getch(); switch(bs) { case 72: // Pfeil hoch -> Positionswechsel { if(temps.pos==0) { temps.pos=anzahl; gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } else { temps.pos--; gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } } break; case 80: //Pfeil runter -> Positionswechsel { if(temps.pos==anzahl) { temps.pos=0; gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } else { temps.pos++; gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } } break; } } else { switch (bs) { case 13:{return 0;} //Beendigung der Funktion mit Enter case 8:{ //Löschen des letzten Zeichnes point[temps.pos].temp[strlen(point[temps.pos].temp)-1]=point[temps.pos].temp[strlen(point[temps.pos].temp)]; gotoxy(point[temps.pos].x+strlen(point[temps.pos].temp),point[temps.pos].y); cprintf(" ");//Damit Zeichen auf Bildschirm verschwindet gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } break; default: { //Hinzufügen eines Zeichens strncat(point[temps.pos].temp,&bs,1); gotoxy(point[temps.pos].x,point[temps.pos].y); cprintf("%s",point[temps.pos].temp); } break; } } } } while(1); } int main() //Hauptfuntkion { point[0].x=1; point[0].y=1; point[1].x=2; point[1].y=2; temps.pos=0; eingabe(); return 0; }
Nun zur Frage:
Ich habe das Problem wenn der oberer String mehr als "punkte" zeichen hat funktioniert meine Positionierung nicht mehr. Die eingabe verschiebt sich total und es kommt nur Schrott raus
. Ich hoffe ihr könnt mir helfen.
Wie schon gesagt bin ich ein absoluter Anfänger und bin über jede Antwort froh.Danke im Voraus
Alex
-
Das sieht nach einem klaren Fall für Speicher-Überschreibung aus - direkt hinter point[0].temp liegt point[1].x] im Speicher und wenn du zu viele Zeichen dort reinschreibst, zerlegst du dir damit die Positionsangaben.
Btw, schluckt der Compiler es wirklich, wenn du ein Array ohne Größenangabe definierst?
-
Oh man das ist peinlich.
Na klar du hats recht wenn ich den mit einem festen Wert versehe geht es.Vielen Dank und noch einen schöne Tag.
Gruß Alex