Une déclaration dans un switch

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Une déclaration dans un switch

Messagede YuGiOhJCJ le 21 Aoû 2006 18:11

Yo,
Bah là je viens de découvrir un truc assez problématique en langage C:
Impossible de déclarer des variables lorsqu'on se trouve à l'interieur d'un switch.

Regarde ce code par exemple ne se compile pas:
Code: Tout sélectionner
#include <stdio.h>
int main(){
   int choix = 1;
   switch(choix){
      case 1:
         printf("Ici ça marche.");
         break;
      case 2:
         int a = 1;
         break;
      case 3:
         printf("La aussi.");
         break;
      case 4:
         printf("Car il n'y a pas de déclaration.");
         break;
      case 5:
         printf("Par contre, le problème apparaît au choix n°2.");
         break;

   }
   return(0);
}


Le compilateur dit:
Code: Tout sélectionner
declaration_switch.c: Dans la fonction « main »:
declaration_switch.c:9: error: erreur de syntaxe before "int"


Alors ça c'est vraiement étrange je n'ai jamais lu ça sur mes livres de langage C et je n'ai rien trouvé en faisant un "google".

C'est vraiement dommage car ça pourrait simplifier mes programmes.
Tu connaissais ce problème? Tu connais une parade?
Thanx :roll:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede Vally8 le 21 Aoû 2006 21:26

Je n'ai jamais essayé de mettre de declaration de variable à l'interieur d'un switch...
Moi on m'a appris à mettre toutes les déclarations de variable en début de fonction.
Je pense que comme ça, ça devrait aller ;)
Code: Tout sélectionner
#include <stdio.h>
int main(){
   int a;
   int choix = 1;
   switch(choix){
      case 1:
         printf("Ici ça marche.");
         break;
      case 2:
         a = 1;
         break;
      case 3:
         printf("La aussi.");
         break;
      case 4:
         printf("Car il n'y a pas de déclaration.");
         break;
      case 5:
         printf("Par contre, le problème apparaît au choix n°2.");
         break;

   }
   return(0);
}


Mais je suis impatiente de voir ce que va dire maitre 1392 :oui:
Moi, j'aime schtroumpfer...
Si vous voulez faire une soluce, plutôt que de m'envoyer un MP, postez-là ici (j'ai rarement le temps de répondre à tous les MP)
Avatar de l’utilisateur
Vally8
Gouroute du Site
Gouroute du Site
 
Messages: 15567
Inscription: 07 Mai 2004 18:14
Localisation: Au pays des schtroumpfs
Jeu(x) du moment: Professor Layton, Tales of Vesperia, Dragon Quest 9

Messagede Deacon le 21 Aoû 2006 22:02

Ba c'est pour la lisibilité les declarations en debut de fonctions...
mai je pense que le compilateur est pas daccord parce que c'est une zone succeptible de pas etre executée, donc la declaration d'une variable etant primordiale (surtout en C grrr je hais ce langage!)... il aime pas du tout!
N’importe qui peut haïr l’humanité après une agression. Seuls les grands esprits la haïssent… avant.
_House
Avatar de l’utilisateur
Deacon
Drakcobo écrivain
Drakcobo écrivain
 
Messages: 20895
Inscription: 09 Mai 2005 10:17

Messagede moi1392 le 21 Aoû 2006 23:13

mets les variables en début de bloc (début de fonction) ou crée un bloc dans ton switch :

Code: Tout sélectionner
    case 2:
        {
            int a = 1;
        }
        break;


bien évidement, ta variable n'existera plus dès que tu sortira du bloc !

la declaration d'une variable etant primordiale (surtout en C grrr je hais ce langage!)...


C'est quand même la base de la base d'une programmation saine (et performante) :ane:
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede Deacon le 21 Aoû 2006 23:38

Oui mais bon on a pas vraient eu de cours de C... enfin les profs etaitent pas vraiment impliqués donc... ba j'y comprends pas grand choses ou alors jsute les bases, ce que j'ai assimilé tout seul!
Bref le C est moi c'est pas le grand amour... mais j'arrive à faire des trucs minables qui marchent :oui:
N’importe qui peut haïr l’humanité après une agression. Seuls les grands esprits la haïssent… avant.
_House
Avatar de l’utilisateur
Deacon
Drakcobo écrivain
Drakcobo écrivain
 
Messages: 20895
Inscription: 09 Mai 2005 10:17

Messagede moi1392 le 22 Aoû 2006 09:56

Oui mais bon on a pas vraient eu de cours de C... enfin les profs etaitent pas vraiment impliqués donc...


pareil pour moi mais un jour je me suis dit que c'est ce qui me fallait pour faire ce que je voulais, donc j'ai acheté le plus gros bouquin de C que j'ai trouvé en magasin et je m'y suis m'y ;)
puis je suis passé au C++ (un peu un mix des deux en fait quand tu débutes ;)) et maintenant je bosse grâce à ça ;)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede Deacon le 22 Aoû 2006 15:33

J'ai aussi un gros bouquin dessus qui m'a permis d'avoir la moyenne grace aux exemples...
N’importe qui peut haïr l’humanité après une agression. Seuls les grands esprits la haïssent… avant.
_House
Avatar de l’utilisateur
Deacon
Drakcobo écrivain
Drakcobo écrivain
 
Messages: 20895
Inscription: 09 Mai 2005 10:17

marche

Messagede YuGiOhJCJ le 02 Sep 2006 17:20

Oui effectivement si on déclare avant le switch ça fonctionne mais ce n'est pas ce que je veux faire.
Et puis avec les blocs c pas bon non plus puisque je souhaite que la variable soir utilisable même après...Ce ne serait pas le moment d'utiliser des pointeurs?
Si je déclare un pointeur dans les blocs du switch, il sera utilisable n'importe ou dans le programme n'est-ce pas?

Deacon>C'est vrai qu'il est dommage de devoir typer chaque variable lors de sa déclarartion et aussi de devoir toujours la déclarer. Mais au moins la programmation est claire et en le lisant on comprend beaucoup plus rapidement je trouve. J'ai essayé le Java est j'ai vraiement du mal avec cette programmation orienté objet. Obligé de lire la doc de Sun pour connaitre les méthodes, objets, et autres...C'est vraiement fastidieux. En C il suffit de lire les headers.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede Deacon le 02 Sep 2006 18:43

Moi j'ai tres vite appris à programmer en Java donc la programmation objet m'est tres naturelle...
en fait, c'est surtout le systeme d'adresse et la syntaxe que je trouve rebarbatif, une question d'habitude!
Je suis sur qu'apres une semaine avec quelqu'un qui explique bien...
N’importe qui peut haïr l’humanité après une agression. Seuls les grands esprits la haïssent… avant.
_House
Avatar de l’utilisateur
Deacon
Drakcobo écrivain
Drakcobo écrivain
 
Messages: 20895
Inscription: 09 Mai 2005 10:17

Messagede moi1392 le 04 Sep 2006 11:47

Et puis avec les blocs c pas bon non plus puisque je souhaite que la variable soir utilisable même après...Ce ne serait pas le moment d'utiliser des pointeurs?


Si tu souhaites que la variable soit utilisable après le switch, tu n'as pas le choix, c'est au début de ta fonction qu'il faut la déclarer.
En C, il faut toujours déclarer une variable au début du bloc dans lequel tu souhaites qu'elle soit visible :
- au début du fichier pour une variable globale
- au début d'une fonction pour une variable utilisable dans toute la fonction
- au début d'un bloc (if, for, switch, simple bloc { }) pour une variable utilisable dans tous le bloc.

Si je déclare un pointeur dans les blocs du switch, il sera utilisable n'importe ou dans le programme n'est-ce pas?

non, un pointer est une variable, sauf qu'il ne contient pas une donnée mais une adresse vers une donnée (ce qui dans le fond reviens au même car une adresse est une donnée ;)) et elle est donc régie par les mêmes règles de visibilité. Ta variable pointeur est visible et donc utilisable dans tout le bloc dans lequel elle a été déclarée.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

cron