Variablenname "hochzählen"

Gast #5698211
Lesenswert?

Hallo Zusammen,

irgendwie stehe ich gerade aufm Schlauch bzw. komme nicht weiter.
Und zwar würde ich gerne einen Variablennamen hochzählen.

Hier mal zu Verdeutlichung der Code
1
 for(i=0; i<20; i++) 
2
        {
3
            Sensor_VALUE[i] = get_sensor_value(Sensor_X)
4
        }

Jetzt ist es so das Sensor_X eigentlich Sensor_0 .... Sensor_19 ist, und 
diesen namen würde ich gerne parallel zum Array Sensor_VALUE[] 
hochzählen.

Schon mal vielen Dank für eure Tips.......
Gast #5698226
Lesenswert?

Wenn du die get_sensor_value modifizieren kannst (oder eine neue 
Funktion schreiben kannst), dann ist es vermutlich am saubersten einfach 
die Laufvariable als Funktionsparameter zu übergeben, und die Sensoren 
so zu adressieren. Vorteil du kannst auch auf evtl. fehlerhafte Werte 
reagieren.

Ansonsten ein Array in dem die Werte von Sensor_1 bis Sensor_19 drin 
stehen, bzw. die Pointer auf diese Werte (je nachdem wie komplex die 
entsprechenden Datentypen sind, und ob sie an mehreren Stellen benutzt 
werden.
Gast #5698239
Lesenswert?

Danke, genau das war der benötigte Denkanstoß.........

Hier nur nochmal zur info die Definitionen aus der Sensor.h
1
enum sensor_names
2
    {
3
        Sensor_0 = 0,
4
        Sensor_1 = 1,
5
        Sensor_2 = 2,
6
        Sensor_3 = 3,
7
        Sensor_4 = 4,
8
        Sensor_5 = 5,
9
        Sensor_6 = 6,
10
        Sensor_7 = 7,
11
        Sensor_8 = 8,
12
        Sensor_9 = 9,
13
        Sensor_10 = 10,
14
        Sensor_11 = 11,
15
        Sensor_12 = 12,
16
        Sensor_13 = 13,
17
        Sensor_14 = 14,
18
        Sensor_15 = 15,
19
        Sensor_16 = 16,
20
        Sensor_17 = 17,
21
        Sensor_18 = 18,
22
        Sensor_19 = 19
23
    };
Gast #5698256
Lesenswert?

PIC-Neuling85 schrieb im Beitrag #5698211:
> Schon mal vielen Dank für eure Tips..

Grundlagen im Programmieren lernen.

Nan kann Variablennamen nicht hochzählen, dafür gibt es Arrays
die du ja auch auf der linken Seite verwendet hast.

Du musst dir also eine andere Art der Zuordnung der Sensorwerte auf die 
Arrayzellen ausdenken.

Entweder einen nach dem anderen, ohne Schleife
1
Sensor_VALUE[0] = get_sensor_value(Sensor_0);
2
Sensor_VALUE[1] = get_sensor_value(Sensor_1);
3
Sensor_VALUE[2] = get_sensor_value(Sensor_2);
4
Sensor_VALUE[3] = get_sensor_value(Sensor_3);
5
:
oder mal hinterfragen was get_sensor_value überhaupt tut, den Sensorwert 
wie im Namen behauptet holt es jedenfalls nicht, denn der wird als 
Parameter schon reingesteckt, und hinterfragen, was Sensor_X überhaupt 
ist, vielleicht wäre dort ein Array auch möglich/passender.

Jedenfalls fehlt dir einiges am Grundverständnis übers Programmieren, 
der Unterschied compile-time zu Laufzeit.
#5698262
Lesenswert?

PIC-Neuling85 schrieb im Beitrag #5698211:
> Jetzt ist es so das Sensor_X eigentlich Sensor_0 .... Sensor_19 ist, und
> diesen namen würde ich gerne parallel zum Array Sensor_VALUE[]
> hochzählen.

Keine Ahnung, ob ich verstehe, was Du brauchst, aber wenn Du Variablen 
namens
Sensor_0 bis Sensor_19 hast (und die - aus welchen Gründen auch immer - 
nicht in ein Array "Sensor[20]" umbauen kannst), bau' dir eine 
Lookup-Tabelle (vielleicht sogar mit einer Lookup-Funktion):
1
sensor_t Sensor_0, Sensor_1, Sensor_...
2

3
sensor_t *sensor_lookup_table[] =
4
{ &Sensor_0, &Sensor_1, ... };
5

6
sensor_t *sensor_lookup(int index)
7
{
8
    // TODO: Prüfung auf validen index
9
    return sensor_lookup_table[index];
10
}

dein Code würde dann so aussehen:
1
for(i=0; i<20; i++) 
2
        {
3
            Sensor_VALUE[i] = get_sensor_value(*sensor_lookup(i));
4
        }

Ob das jetzt "von hinten durch die Brust ins Auge" oder irgendwie 
sinnvoll ist, mußt Du selber rausfinden (es wird ja wohl hoffentlich 
einen Grund geben, warum Du das so gemacht hast, wie Du's gemacht 
hast..)
Gast #5698267
Lesenswert?

PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h

Es sind also gar keine Variablennamen.
Sondern enum-Bezeichner.

Soviel zu Grundkenntnissen im Programmieren.

adamap lag also richtig.
Gast #5698291
Lesenswert?

MaWin schrieb:
> Es sind also gar keine Variablennamen.
> Sondern enum-Bezeichner.

Dann Wert bekommt man über einen pointer. Als Neuling würde ich das 
weglassen.

PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h
Ein wenig sinnlos wenn da dann doch wieder die gleichen Zahlen stehen.

Würde ich drauf verzichten und den Sensor "abstrahieren" und die 
SensorNr nennen.
#5698437
Lesenswert?

PIC-Neuling85 schrieb im Beitrag #5698239:
> Hier nur nochmal zur info die Definitionen aus der Sensor.h
>
>
1
> enum sensor_names
2
>     {
3
>         Sensor_0 = 0,
4
>         Sensor_1 = 1,
5
...
6
>         Sensor_19 = 19
7
>     };
8
>

Aha. Also eine komplett nutzlose enum Deklaration. Wenn es um 
Lesbarkeit gehen sollte (kann ich ehrlich gesagt nicht erkennen, aber 
sei es drum) dann wäre das hier besser:
1
#define Sensor(x) (x)
2

3
//und dann statt
4
get_sensor_value(i);
5

6
// das besser(?) lesbare
7
get_sensor_value(Sensor(i));


Außerdem: du schreibst davon, daß du einen Variablennamen hochzählen 
willst. Das ist Unsinn. Die benamten Konstanten in einer enum 
Deklaration sind keine Variablen sondern heißen Enumerator(en).

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