Hallo,
ich habe eine Variable die eine Senderfrequenz beinhaltet, die da heißt
"Frequenz". Diese gebe ich auf einem Display aus. Jetzt möchte ich, dass
statt der Senderfrequenz der Sendername angezeigt wird den ich der
Frequenz zuordne. Natürlich kann man das durch lange switch case
Anweisungen lösen, ich möchte jedoch ne kurze Lösung.
Am Besten wäre eine tabelle durchsuchen, ob die gewünschte Frequenz als
Name im Speicher hinterlegt ist, wenn ja, dann den Namen, wenn nicht die
Frequenz anzeigen.
Es geht mir hauptsächlich um die Suchfunktion.
Bin für jeden Vorschlag dankbar...
Ingo
Ingo schrieb:> Am Besten wäre eine tabelle durchsuchen, ob die gewünschte Frequenz als> Name im Speicher hinterlegt ist, wenn ja, dann den Namen, wenn nicht die> Frequenz anzeigen.
Dann mach es doch so? Die Tabelle als Array mit Frequenz und Sendername.
Mit einer Schleife gehst Du alle Einträge durch und schaust, ob die
Frequenz dabei ist. Wenn es sehr viele Einträge sind, kannst Du es auch
als binäre Suche implementieren, brauchst Du aber vermutlich nicht. Wenn
kein passender Eintrag gefunden wurde, gibst Du die Frequenz aus.
Also ein Array von Strukturen, wobei jedes Strukturelement einen
Zusammenhang Frequenz->Sendername darstellt.
Dein C-Buch weiß mehr darüber. Du hast doch eines?
Wenn nicht: Warum hast du keines?
(natürlich nur, wenn du auch in C programmierst, was ich mal
voraussetze)
troll schrieb:> typedef struct> {> int frequenz;> char *name;> } sender_t
Vorsicht:
Wenn er dem Benutzer die Möglichkeit geben will, den Stationsnamen
selbst einzustellen, dann geht das so in die Hose. Solange die
Stationsnamen fix sind, ist es hingegen ok.
troll schrieb:> Ähhh... was meinst du?
Hier
typedef struct
{
int frequenz;
char *name;
} sender_t
sender_t sender[42]={{100, "Radio1"}, {105, "Radio2"},...};
Ohne zusätzlichen Aufwand kriegt er hier keine benutzerdefinierbare
Stationsnamen unter. Die Pointer zeigen auf String-Literale. Und die
sind per Defintion unberühbar.
troll schrieb:> Ähhh... was meinst du?
Bei der Version von Karl Heinz sind die Strings immer 20 Zeichen lang
und liegen direkt im Array. Bei Deiner und meiner Version liegen im
Array dagegen Zeiger auf die Stringliterale. Die darf man zur Laufzeit
natürlich nicht mehr ändern.
1. Die Schleife läuft zu oft. sizeof(Sender) gibt Dir den
Speicherverbrauch des Arrays in Byte, nicht die Anzahl der Einträge. Wie
es richtig geht, hat troll schon geschrieben.
2. In der Schleife wird Index immer auf 255 gesetzt, außer bei ANTENNE.
3. Zu der Fehlermeldung gibt es bestimmt eine Zeilennummer. In der geht
etwas schief. Ohne den vollständigen Code (z.B. wie Index, struct
Sender_t oder UKW definiert ist), ist das Rätselraten.