Hallo Semjon,
ja so etwas in der Art habe ich seit gestern schon umgesetzt.
Werde aber trotzdem deines noch mal genauer anschauen und testen.
Danke abermals
Naja… ich paiste es auch noch mal rein… warum auch nicht:
#include
#include
typedef struct { char key; char *value; } AssocTabl;
void hauptmenue( );
AssocTabl* get_dbmenue_row( int , char );
void print_line(char, int);
void print_dbmenue(){
AssocTabl* KeyVal; // AssocTabl* dbmenue( int offset, char key )
print_line(’_’,80);
get_dbmenue_row(-1,0); // Index auf erstes Element setzen
while( KeyVal = get_dbmenue_row(1,0) ) printf("%c = %s\n", KeyVal->key , KeyVal->value );
print_line(’_’,80);
}
void print_line(char c, int len ){ for(; len>0; len–){ printf("%c",c);}printf("\n" ); }
AssocTabl* get_dbmenue_row( int offset, char key ){
// offset ist (normalerweise) 1 oder 0, -1 bedeutet key_last_used zurücksetzen.
// get_val_flag ist entweder 0 oder eine zahl (besser nur 1)
int i =0 ; // temp. Zählvariable
static int key_last_used = -1; // Wird dann beim ersten Offset (meist) auf 0 schreiten.
// Static damit der Inhalt nicht jedesmal neu definiert wird. Nur aus performance gründen.
static AssocTabl dbmenue[] = {
{ ‚x‘, „Exit. D.h. Programmende“ },
{ ‚v‘, „Datenbank oeffnen/anlegen“ },
{ ‚o‘, „bestehende Datenbank bearbeiten (Name vorhanden)“ },
{ ‚a‘, „Datensaetze anzeigen (sequentiell, nacheinander)“ },
{ ‚h‘, „Datensaetze hinzufuegen (von Tastatur) / importieren (aus externer Datei)“ },
{ ‚s‘, „Datensaetze suchen“ },
{ 0 , 0 }
}, *pt = dbmenue;
//printf("%i", key_last_used );
if( offset == -1 ){ key_last_used = -1; }
if( !offset && !key ){
printf( „Meldung aus Funktion, Zeile 49\n“
„AssocTabl* dbmenue( int offset, int get_val_flag, char key )\n“
„(!offset, … , !key ) macht keinen Sinn.\n“);
getchar(); return 0;
}
if( offset > 0 ){ // negativer Werte sind besondere Steuerzeichen.
// Wir setzen den Index hoch und geben den Eintrag zurück.
key_last_used += offset ;
if( dbmenue[key_last_used].key ) return &dbmenue[key_last_used];
key_last_used = -1; // Zurücksetzen, damits beim nächsten durchlauf wieder vorne beginnt.
return 0;
}
// Groß und Kleinschreibung soll keine Rolle spielen. c " ); // Bash zeichnen.
key = getche(); clrscr(); // Taste erfassen und Bildschirm löschen.
if( !(KeyVal = get_dbmenue_row(0, key )) ){
printf( "Fuer Ihre Eingabe >%c%ckey );
switch( key ) {
case ‚v‘: break; // „Datenbank oeffnen/anlegen“ },
case ‚o‘: break; // „bestehende Datenbank bearbeiten (Name vorhanden)“ },
case ‚a‘: break; // „Datensaetze anzeigen (sequentiell, nacheinander)“ },
case ‚h‘: break; // „Datensaetze hinzufuegen (von Tastatur) / importieren (aus externer Datei)“ },
case ‚s‘: break; // „Datensaetze suchen“ },
case ‚x‘: break; // „Exit. D.h. Programmende“
default: print_line(’=’,80);
printf( „Programmierfehler. Unkonsistenz: Der Fall %c ist ohne Funktionalitaet.\n“, key );
print_line(’=’,80);
}
} while( key != ‚x‘ );
}