IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème de variable dans un programme de vote


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 28
    Points
    28
    Par défaut Problème de variable dans un programme de vote
    Bonjour réaliser un programme de vote.
    Et lorsque l'on en est dans le vote si on appuie sur F5 on passe au débouillement qui lorsqu'on appuie sur F6 sort du programme.

    Mais il ya quelques problèmes de déclaration de variables avec DevC++ alors quelles sont déclarées.
    Je ne comprend pas pourquoi.
    Si quelqu'un peut jeter un coup doeil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.c>
    #include <windows.h>
     
    #define C 100
     
    int test;
    void Thread(void*);
    void depouillement();
    float oui,non,nul;
    int main(void)
    {
    HANDLE hThread = 0;
    hThread = (HANDLE)_beginthread(Thread, 0, NULL);
     
     
         int i=0,j=0;
         char choix;
         int resultat;
         oui=0;
         non=0;
         nul=0;
         int tab[C]={0};//initialise tout le tableau
         int num; // c'est un nombre beaucoup plus grand car tu n'as pas besoin des nombres négatifs
     
     
         while(63!=test)
     
         {
             i++;
             clrscr ();
             printf ("Quel est le numero du votant ? \n\n");
             scanf ("%d",&num);
             clrscr();
             resultat=0;
             j=0;
             //test si le num est présent sinon, on teste le N° suivant
             while(j<=i && resultat==0)// condition pour rester dans la boucle
             {
                   //attention il faut toujours comparer 2 var de même type
                   if (num==tab[j])
                   {
                      resultat=1;
                   }
                   else
                   {
                       j++;
                   }
             }
             //gestion du resultat
             if (resultat==1)
             {
                   printf("Vous avez deja vote\n\n");
                   i--;  //attention si la personne a déjà voté, il ne faut pas considérer que c'est un nouveau votant
                   system("PAUSE");
             }
             else
             {  tab[i]=num; 
                printf ("Quel est le choix du votant ? Ecrit o=oui  ou  n=non ou u=nul\n\n");
                scanf("%*c%c",&choix);
                clrscr();
                printf ("Felicitations, Vous avez Vote !!\n");
                Sleep(2000);
                 //il ne faut pas oublier le cas ou la personne selectionne une autre lettre : c'est donc un vote nul
                 switch (choix)
                 {
                  case 'o': oui++;break;
                  case 'O': oui++;break;
                  case 'n': non++;break;
                  case 'N': non++;break;
                  default:  nul++;break;
                 }
             }
           }
         oui=oui/i*100;
         non=non/i*100;
         nul=nul/i*100;
     
         depouillement();
     
         for (j=0;j<i;j++)
     
             {
             printf("%d\n",tab[j]);
             }
     
         system("PAUSE");
     
        return 0;
     
    }
     
     
     // Depouillement//
     
    void depouillement()
     
    {
     HANDLE hThread = 0;
     hThread = (HANDLE)_beginthread(Thread, 0, NULL);
     while(64!=test)
        {
     
        printf("Les Resultats sont  OUI :  %.1f %% NON : %.1f %% NUL : %.1f %% \n",oui,non,nul);
        }
    }
     
     
    //Programme Thread//
     
    void Thread(void* arg)
    {
     
      while(1)
      {
        test=getch();    
      }
    _endthread();
     
    }
    Merci d'avance

    @+ Jérémy

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut Re: Problème de variable dans un programme de vote
    Citation Envoyé par jejeb
    Mais il ya quelques problèmes de déclaration de variables avec DevC++ alors quelles sont déclarées.
    Je ne comprend pas pourquoi.
    Si quelqu'un peut jeter un coup doeil.
    Si tu donnais une indication des erreurs, cela faciliterait la vie. Tout le monde ne tourne pas sous windows...

    Jc

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    ah excusez moi :

    voici les erreurs lors de la compilation :

    :In function `main':
    18: parse error before `int'
    24: parse error before `int'
    31: `i' undeclared (first use in this function)
    31: (Each undeclared identifier is reported only once
    31: for each function it appears in.)
    34: `num' undeclared (first use in this function)
    36: `resultat' undeclared (first use in this function)
    37: `j' undeclared (first use in this function)
    42: `tab' undeclared (first use in this function)
    61: `choix' undeclared (first use in this function)
    68: warning: unreachable code at beginning of switch statement
    [Mis en place des balises quote par fearyourself]

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    A mon avis, tu compiles avec un compilateur/une option qui oblige les déclarations à être au début des fonctions (donc pas C99).

    Modifies ton compilateur ou alors mets tes déclarations au début. Tu as ceci qui traîne au milieu des déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    hThread = (HANDLE)_beginthread(Thread, 0, NULL);
    et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         oui=0;
         non=0;
         nul=0;
    Jc

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    31: `i' undeclared (first use in this function)
    i n'est pas déclaré dans le bloc "while" il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i=0;//par exemple
    i++;
    idem pour les autres.

    EDIT:attention à la portée des variables:entre 2 accolades.

    EDIT:quoique ça a l'air de marcher...
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main(){
     
        int i=56;
     
        {
        int i=1;
        do{
        i++;
        printf("%d\n",i);
        }while(i<10);
        }
        printf("%d",i);
        system("pause");
        return 0;}


    affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2
    3
    4
    5
    6
    7
    8
    9
    10
    56
    Car il y a le "i" a l'extérieur des {}
    et celui à l'intérieur.


    Ce qui est bizarre c'est que le compilo ne signale même pas de warning!
    En fait le mien si une 2eme variable n'est pas déclarée explicitement dans les {} prend la précédente automatiquement.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour le warning: Il faut rajouter explicitement l'option -Wshadow

    Pour compiler avec les déclaration hors début de bloc, il faut rajouter l'option -std=c99 (et ne PAS mettre l'option -ansi, qui est prioritaire et force en vieux C89)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fearyourself
    A mon avis, tu compiles avec un compilateur/une option qui oblige les déclarations à être au début des fonctions (donc pas C99).
    Tu veux dire 'en début de bloc'...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par fearyourself
    A mon avis, tu compiles avec un compilateur/une option qui oblige les déclarations à être au début des fonctions (donc pas C99).
    Tu veux dire 'en début de bloc'...
    Lapsus de comment je programme

    Mais effectivement c'est ce que je voulais dire

    Jc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de variable dans un foreach
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/05/2006, 16h57
  2. [MySQL] Problme de variables dans requete
    Par eown dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2006, 17h05
  3. problème de variable dans formulaire
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 06h53
  4. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 18h38
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo