Dubbi sull'uso di "switch-case"

Buonasera a tutti, perdonate la mia inesperienza, ho un problema con l'uso dell'operatore switch-case, non riesco a comprendere dove sbaglio inserendo i paragoni per i "case" e il compilatore mi restituisce il seguente errore:
error: expected primary-expression before ‘<’ token,
error: expected primary-expression before ‘>=’ token

la mia intenzione è indirizzare il flusso in in 3 vie a seconda che la divisione dia un numero maggiore o minore di 1

ho usato la seguente sintassi ma evidentemente non ho capito per niente il modo d'uso:

switch (dir=(sens1/sens2))
{
Serial.println (dir);

case <1:
Rturn();
break;

case >=1:
Lturn();
break;

case 0:
FWturn();
break;

perdonate la mia inesperienza, vorrei capire dove sbaglio o se questa funzione è inadeguata a questo scopo
grazie a tutti, Mic

Devi usare dei if. Swich case gestisce solo valori discreti per intenderci ==.

Ciao Uwe

uwefed:
Devi usare dei if. Swich case gestisce solo valori discreti per intenderci ==.

Ciao Uwe

Grazie Uwe,

solo per istruzione personale, significa che posso gestire solo delle situazioni booleane e/o solo delle assegnazioni di tipo word?

oppure posso assegnare dei valori ben definiti?

potresti spiegarmi meglio?

scusa la mia ignoranza in proposito
Mic

Puoi gestire tutte le situazioni di UGUAGLIANZA che vuoi, con tutti i valori ben definiti che vuoi (credo che funzioni addirittura con gli oggetti, se questi definiscono operator==() operator int()), ma appunto solo di uguaglianza. Non puoi fare test < <= > >= ecc, all'interno di uno switch. Per quello devi usare una catena di if...else if oppure, se i valori sono pochi, usare più case uno dietro l'altro: tipo

switch (x) {
  case 1:
  case 2:
  case 3:
    // Qui sai che x è > 0 && < 4
    break;
}

Uguaglianze numeriche. No stringhe o peggio String

Quei tipi di case con maggiore/minore è accettato da Select Case del visual basic. In C no

Dal Kernighan & Ritchie, The C Programming Language ... ovvero, la Bibbia del 'C':

3.4 Switch
The switch statement is a multi-way decision that tests whether an expression matches one of a number of constant integer values, and branches accordingly.

switch (expression) {
case const-expr: statements
case const-expr: statements
default: statements
}

Each case is labeled by one or more integer-valued constants or constant expressions. If a case matches the expression value, execution starts at that case. All case expressions must be different. The case labeled default is executed if none of the other cases are satisfied. A default is optional; if it isn't there and if none of the cases match, no action at all takes place. Cases and the default clause can occur in any order.

Direi che è piuttosto chiaro :wink:

Guglielmo

In effetti con gli oggetti non funziona, c'è un'interessante disquisizione in merito qui: Sebastien Kramm: C++: switch on any data type (part 1).

Comunque in ogni oggetto è possibile definire un operatore di conversione ad int che renderebbe ciò possibile. Ho corretto il post precedente alla luce di ciò, ma direi che una discussione approfondita di questo è OT :).

Grazie mille ragazzi, siete stati chiarissimi, in effetti nei tutorial che avevo cercato nessuno aveva descritto bene come si usa ,ora è piu chiaro anche per me e provero' stasera a modificare il tutto.

a presto
Mic