langage C incrementation dans switch case....
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

langage C incrementation dans switch case....



  1. #1
    inviteac751535

    langage C incrementation dans switch case....


    ------

    Bonsoir,

    j'ai un bout de programme a vous presenter car je n'arrive pas a l'analyser....disons que c'est assez confus.
    Code:
    ***************debut***************
    declaration etc.........
    typedef union DATA_PACKET
    {byte Data[USBGEN_EP_SIZE];  //For byte access
     } DATA_PACKET;
    
    DATA_PACKET datapacket;
    void main (void) {
    counter=0
    (For counter=0,counter<64,counter++) {
    switch (datapacket.data[counter]) {
    case 1 : PORTB = datapacket.data[++counter];break;
    case 2 : PORTB = datapacket.data[++counter];break;
    case 3 : PORTB = datapacket.data[++counter];break;
    etc......case63;}
    }}**************FIN*************
    voila, il manque peut etre quelques ';' mais bon....

    ce que je n'arrive pas a saisir c'est la difference entre datapacket.data[counter] utilise pour le switch et le datapacket.data[++counter] qui donne la valeur au portB.
    Il y en a un pour chaque case de 0 a 63 (suivant la boucle for) et il ya la valeur de la variable datapacket.data[1];datapacket.data[2];etc....

    personnellement je ne vois pa de difference et pourtant il y en a une, mais je ne la percois pas.

    donc si vous avez une explication je suis prenneur.

    merci.

    -----
    Dernière modification par gienas ; 06/04/2010 à 10h44. Motif: Ajouté les balises code

  2. #2
    Jack
    Modérateur

    Re : langage C incrementation dans switch case....

    Je ne suis pas sur d'avoir bien compris la question. Tu te demandes pourquoi utiliser un switch, c'est çà?

    C'est vrai que ça parait assez curieux, car les "++counter" dans la boucle contrôlée par la même variable, c'est plutôt dangereux car counter risque de sauter de 2 en 2.

    A+

    PS: please, utilise les balises "code" si tu veux être lu.

  3. #3
    invite765732342432
    Invité

    Re : langage C incrementation dans switch case....

    Citation Envoyé par Jack Voir le message
    C'est vrai que ça parait assez curieux, car les "++counter" dans la boucle contrôlée par la même variable, c'est plutôt dangereux car counter risque de sauter de 2 en 2.
    A priori, c'est le but de sauter de 2 en 2: premier octet, l'identifiant, deuxième octet, la valeur.

    La question qui me vient en regardant ce code serait plutôt: pourquoi faire 63 cas de switch qui font exactement la même opération ?
    Et là, j'avoue n'en avoir aucune idée (sauf éventuellement pour préparer d'éventuelles évolutions...)

  4. #4
    inviteac751535

    Re : langage C incrementation dans switch case....

    bonjour,
    Pour que ca paraisse plus logique voila comment je pensais faire :
    declaration etc.........
    Code:
    *********debut code***************
    typedef union DATA_PACKET
    {byte Data[USBGEN_EP_SIZE]; //For byte access
    } DATA_PACKET;
    
    DATA_PACKET datapacket;
    void main (void) {
    counter=0
    (For counter=0,counter<64,counter++ ) {
    switch (counter) {
    case 1 : PORTB = datapacket.data[counter];break;
    case 2 : PORTB = datapacket.data[counter];break;
    case 3 : PORTB = datapacket.data[counter];break;
    etc......case63;}
    }}
    **************FIN code*************
    Car effectivement je ne vois pas l'interet de sauter de 2 en 2 sauf si la trame a lire serait du style #1,data1,2,data2,3,data3...... data63# mais ce n'est pas la cas car on recoit 64 octets a la suite.

    donc voila qu'en pensez vous


    Les balises code ne sont pas une "déclaration" (d'intention), mais l'utilisation de l'outil # de la barre d'outils lors de la rédaction du message.

    1- tu copies ton code dans l'intervalle ][ créé par l'utilisation du bouton #;

    2- ou bien tu copies ton code; tu le sélectionnes; tu actionnes le bouton #, qui te pose les deux balises avant et après.

    C'est cette méthode que j'ai utilisée dans tes deux messages, suite à l'invitation légitime de Jack.

    .
    Dernière modification par gienas ; 06/04/2010 à 10h49. Motif: Ajouté les balises code

  5. A voir en vidéo sur Futura
  6. #5
    invite2d7144a7

    Re : langage C incrementation dans switch case....

    Bonjour,

    Et moi, je ne vois pas l'intérêt de faire un case quand tous les cas contiennent le même code, en utilisant les mêmes valeurs ...

Discussions similaires

  1. [SYNOPTIQUE] - Comment réaliser une fonctions : switch(..) case ...
    Par invite3c35244f dans le forum Électronique
    Réponses: 2
    Dernier message: 08/12/2009, 15h41
  2. Utilisation de switch avec un autre switch
    Par invitef69a6111 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/10/2009, 19h10
  3. La methode WCET(Worst Case Execution Time) dans le Codésigne ?
    Par invitebe02018c dans le forum Discussions scientifiques
    Réponses: 3
    Dernier message: 11/02/2007, 13h55
  4. rand dans langage c
    Par invite06c35f4d dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 06/03/2006, 20h33
  5. Comment centrer verticalement dans une case...
    Par invite3aca5559 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 27/05/2005, 23h42
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...