Ausgabe Sendername statt Frequenz

Gast #2923171
Lesenswert?

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
Gast #2923186
Lesenswert?

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.
#2923220
Lesenswert?

zb so
1
struct tabelle
2
{
3
  uint16_t Frequenz;
4
  char     Sendername[20];
5
};
6

7
struct tabelle Tabelle[4] =
8
{
9
  { 888, "OE3" },
10
  { 944, "BR3" },
11
  { 967, "Antenne Bayern" },
12
  { 922, "Radio Arabella" },
13
};

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)
Gast #2923227
Lesenswert?

hingehauen ohne gewähr
1
typedef struct
2
{
3
   int frequenz;
4
   char *name;
5
} sender_t
6

7
sender_t sender[42]={{100, "Radio1"}, {105, "Radio2"},...};
8

9
void ausgabe(void)
10
{
11
  uint i;
12
  for(i=0;i<sizeof(sender)/sizeof(sender_t);i++)
13
  {
14
     if(frequenz==sender[i].frequenz)
15
         break;
16
  }
17
  if(frequenz==sender[i].frequenz)
18
    gebe_name_aus();
19
  else
20
    gebe_freq_aus();
Gast #2923246
Lesenswert?

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.
Gast #2923288
Lesenswert?

Mein C&R liegt leider im Büro :(


Folgendes:
1
struct Sender_t Sender [] ={
2
  {RTL, "89.0 RTL"}  ,
3
  {JUMP, "JUMP"}    ,
4
  {NDR2, "NDR2"}    ,
5
  {SAW, "SAW" }    ,
6
  {FFN, "FFN"}    ,
7
  {ANTENNE, "ANTENNE"}
8
};

geht nicht wenn ich
1
for (unsigned char i=0; i<sizeof(Sender);i++){
2
    if(Sender.Sendefrequenz[i] ==  UKW.Sender.soll){
3
      Index = i;
4
    }else{
5
      Index = 255;
6
    }
7
  }
8
  if (Index < 255){
9
    lcd_string(Sender.Name[Index]);
10
  }else{
11
    lcd_formatierte_zahl(UKW.Sender.soll/10,3,1);
12
  }
das so mache, es kommt:
Error  1  subscripted value is neither array nor pointer nor


Was mach ich den falsch?
Gast #2923316
Lesenswert?

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.
Gast #2923338
Lesenswert?

1
for (unsigned char i=0; i<6;i++){
2
    if(Sender[i].Sendefrequenz ==  UKW.Sender.soll){
3
      Index = i;
4
    }else{
5
      Index = 255;
6
    }
7
  }

leider bekomme ich immer noch in der if Zeile die Fehlermeldung:
Error  1  subscripted value is neither array nor pointer nor vector
Gast #2923342
Lesenswert?

Hier is der Prototyp:
1
struct Sender_t{
2
  unsigned int Sendefrequenz;
3
  unsigned char* Name;
4
}

und hier die Definition:
1
struct Sender_t Sender [] ={
2
  {RTL, "89.0 RTL"}  ,
3
  {JUMP, "JUMP"}    ,
4
  {NDR2, "NDR2"}    ,
5
  {SAW, "SAW" }    ,
6
  {FFN, "FFN"}    ,
7
  {ANTENNE, "ANTENNE"}
8
};

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