Forum: Mikrocontroller und Digitale Elektronik NIBO2 - line2 - Unbekannte Operatoren '?' und ':' in C-Code


von Marcel B. (mcb)


Lesenswert?

Hallo,

ich bin gerade dabei das Beispiel-Projekt "line2" aus der NIBO2 Libary 
20110128 zu verstehen. Mir sind allerdings die Operatoren '?' und ':' im 
C-Code nicht geläufig.
Was bewirken diese im konkreten Fall?
1
//Copyrighthinweise...
2
//includes, defines, ...
3
4
int main() {
5
  //inits...
6
  copro_ir_startMeasure();
7
  delay(10);
8
  //motco_setSpeedParameters(5, 4, 6); // ki, kp, kd
9
  copro_setSpeedParameters(15, 20, 10); // ki, kp, kd
10
  int16_t speed_flt_l=0;
11
  int16_t speed_flt_r=0;
12
13
  while(1) {
14
    sei();
15
    _delay_ms(1);
16
    int16_t speed_l=0;
17
    int16_t speed_r=0;
18
19
    floor_update();
20
    char text[20]="--  --  --  --  --";
21
22
    // Bodensensoren
23
    floor_update();
24
25
    //Displayausgaben ...
26
    
27
    int16_t lval = floor_relative[LINE_LEFT];    //hier werden die Werte der
28
    int16_t flval = floor_relative[FLOOR_LEFT];  //Boden- und Liniensensoren
29
    int16_t frval = floor_relative[FLOOR_RIGHT]; //in temporären Variablen
30
    int16_t rval = floor_relative[LINE_RIGHT];   //gesichert
31
32
    int16_t cval = (flval>frval)?flval:frval;    //und was geschieht hier?
33
34
    //...
35
  }
36
  return 0;
37
}

Danke,
Marcel
von Werner (Gast)


Lesenswert?

Hier ein sehr schönes Beispiel:

http://www.peacesoftware.de/ckurs6.html

Sollte dann bei dir heissen

if(flval>frval)
{
cval=flval;
}
else
{
cval=frval;
}

wenn ich das richtig verstanden habe.
von Christian Q. (osx)


Lesenswert?

google einfach ternärer Operator
http://en.wikipedia.org/wiki/%3F:
von Hannes H. (mui)


Lesenswert?

Das ist eine Kurzform einer if-then-else- Anweisung und bedeutet:
1
if (flval>frval) cval = flval;
2
else cval = frval;
von gaast (Gast)


Lesenswert?

int x, y;
x=15;
y=X>10?1:0;

entspricht

int x, y;
x=15
if (x>10) y=1;
else y=0;
von Marcel B. (mcb)


Lesenswert?

Danke für eure vielen hilfreichen Antworten.

Marcel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.