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 lors de la compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut Problème lors de la compilation
    Bonjour,

    J'ai un problème lors de la compilation de mon code, il est écrit en C et je me sert de visual C++ 2008

    Le programme vient d'un exercice habituel "le jeu du plus et du moins", où l'on doit chercher un nombre

    j'ai tenté d'améliorer le programme, mais en essayant de mettre un mode à 2 joueurs, cela ne marche plus
    voila je joins le fichier source et je colle le rapport d'erreur
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
     
    long choix(long choixNiveau,long MAX)
    {
    	 if (choixNiveau == 1)
    		MAX = 100;
    	else if (choixNiveau == 2)
    	    MAX = 1000;
    	else if (choixNiveau == 3)
    	    MAX = 10000;
    	return MAX;
    }
    long genereNombre(long MAX, long MIN, long nombreMystere)
    {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    	return nombreMystere;
    }
    long compare(long nombreMystere, long nombreEntre, long again, long compteur)
    {
        if (nombreMystere > nombreEntre)
                printf("C'est plus !\n\n");
            else if (nombreMystere < nombreEntre)
                printf("C'est moins !\n\n");
            else
    		{
    			printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\n\nVoulez vous recommencer?\n\n oui: 1  non: 0\n\n", compteur);
                scanf ("%ld", &again);
    			return again;
    		}
    }
    int main ( int argc, char** argv )
    {
    	//Nous fixons les variables a 0
        unsigned long nombreMystere = 0, nombreEntre = 0, compteur = 0, again = 1, MAX = 0, choixNiveau = 0, choixJeu = 0, choixJoueur = 0;
    	const long MIN = 1;
    	//Nous demarrons la boucle du jeu entier
       do
       {
    	   do
    	   {
        //Nous demarrons la boucle
    	   printf ("Voulez vous jouer a 1 ou 2 joueur?\n");
    	   scanf ("%ld", &choixJeu);
    	   return choixJeu;
    	   }while (choixJeu < 1, choixJeu > 2);
     
     if ( choixJeux != 2)
     {
      do
      {
    	  //Nous demandons le niveau choisit par le joueur
    	printf ("Quel niveau choisissez-vous?\n\n1: Entre 1 et 100\n2: Entre 1 et 1000\n3: Entre 1 et 10000\n\n");
    	scanf ("%ld", &choixNiveau);
     
      }while (choixNiveau > 2);
     
    	//Nous faisons appelle a la fonction "choix" et "nombreMystere"
        MAX = choix(choixNiveau, MAX);
        nombreMystere = genereNombre(MAX, MIN, nombreMystere);
     }
     else (choixJeu == 2);
     
    {
        printf (" Que me premier joueur choisisse un chiffre.\n");
        scanf ("%ld", nombreMystere);
     }
     do
        {
            // On demande le nombre
            printf("Quel est le nombre ? ");
            scanf("%ld", &nombreEntre);
    		compteur++;
     
            /*On compare le nombre entré avec le nombre mystere grace a
    		la fonction compare et on renvoie la variable again */
     
            again = compare(nombreMystere, nombreEntre, again, compteur);
     
        } while (nombreEntre != nombreMystere);
       }while ( again != 0);
     
        system("PAUSE");
    }
    merci de m'expliquer pourquoi cela ne fonctionne pa. J'ai rajouté des commentaire au cas ou vous ne comprendriez pas.

    Citation Envoyé par rapport
    1>------ Début de la génération*: Projet*: plus_ou_moin++, Configuration*: Debug Win32 ------
    1>Compilation en cours...
    1>main.c
    1>c:\users\philippe\documents\visual studio 2008\projects\plus_ou_moin++\plus_ou_moin++\main.c(18) : warning C4244: 'fonction'*: conversion de 'time_t' en 'unsigned int', perte possible de données
    1>c:\users\philippe\documents\visual studio 2008\projects\plus_ou_moin++\plus_ou_moin++\main.c(31) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\philippe\documents\visual studio 2008\projects\plus_ou_moin++\plus_ou_moin++\main.c(47) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\philippe\documents\visual studio 2008\projects\plus_ou_moin++\plus_ou_moin++\main.c(51) : error C2065: 'choixJeux'*: identificateur non déclaré
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\philippe\Documents\Visual Studio 2008\Projects\plus_ou_moin++\plus_ou_moin++\Debug\BuildLog.htm"
    1>plus_ou_moin++ - 1 erreur(s), 3 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    merci d'avance de vos reponses

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    OK, commençons par le plus simple:
    1. Un time_t n'est pas un simple unsigned int, mais un truc plus gros. Pour l'utiliser avec srand(), tu dois mettre un cast explicite.
    2. Les warnings "Deprecated" sont une c****rie non-standard de Visual. Le mieux est d'aller dans les options du projet, section Préprocesseur, et de rajouter _CRT_SECURE_NO_WARNINGS dans les defines.
    3. choixJeu vs. choixJeux
    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.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le problème vient de l'orthographe de choixJeu : à la ligne 52, c'est écrit choixJeux.

    Il y a d'autres points à problème dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (choixJeu < 1, choixJeu > 2);
    Ne fait pas ce qui est attendu : le OU logique s'écrit ||

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     }
     else (choixJeu == 2);
    ne fait pas grand chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%ld", &choixNiveau);
    %ld ne convient pas comme paramètre de scanf pour un entier. relire la doc de scanf.
    EDIT
    C'est à moi de relire à doc.
    /EDIT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    09-01-26.c: In function `compare':
    09-01-26.c:36: warning: control reaches end of non-void function
    09-01-26.c: In function `main':
    09-01-26.c:50: warning: left-hand operand of comma expression has no effect
    09-01-26.c:69: warning: format argument is not a pointer (arg 2)
    09-01-26.c:69: warning: format argument is not a pointer (arg 2)
    09-01-26.c:41: warning: unused variable `choixJoueur'
    09-01-26.c: At top level:
    09-01-26.c:37: warning: unused parameter 'argc'
    09-01-26.c:37: warning: unused parameter 'argv'
    09-01-26.c: In function `main':
    09-01-26.c:65: warning: statement with no effect
    Dernière modification par Invité(e) ; 26/01/2009 à 11h51. Motif: suppression de betises

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Bon ben merci la compilation fonctionne maintenan je tombe sur un probleme a lexecution je vais quand meme esseyer de le resoudre tout seul et si jmais j'ais un probleme je le posterai dan les 10 min

    merci a vous

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    bon j'avou...... je seche sur la question^^

    voila mon code

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
     
    long choix(long choixNiveau,long MAX)
    {
    	 if (choixNiveau == 1)
    		MAX = 100;
    	else if (choixNiveau == 2)
    	    MAX = 1000;
    	else if (choixNiveau == 3)
    	    MAX = 10000;
    	return MAX;
    }
    long genereNombre(long MAX, long MIN, long nombreMystere)
    {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    	return nombreMystere;
    }
    long compare(long nombreMystere, long nombreEntre, long again, long compteur)
    {
        if (nombreMystere > nombreEntre)
                printf("C'est plus !\n\n");
            else if (nombreMystere < nombreEntre)
                printf("C'est moins !\n\n");
            else
    		{
    			printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\n\nVoulez vous recommencer?\n\n oui: 1  non: 0\n\n", compteur);
                scanf ("%ld", &again);
    			return again;
    		}
    }
    int main ( int argc, char** argv )
    {
    	//Nous fixons les variables a 0
        unsigned long nombreMystere = 0, nombreEntre = 0, compteur = 0, again = 1, MAX = 0, choixNiveau = 0, choixJeu = 0, choixJoueur = 0;
    	const long MIN = 1;
    	//Nous demarrons la boucle du jeu entier
       do
       {
    	   do
    	   {
        //Nous demarrons la boucle
    	   printf ("Voulez vous jouer a 1 ou 2 joueur?\n");
    	   scanf ("%ld", &choixJeu);
    	   return choixJeu;
    	   }while (choixJeu < 1, choixJeu > 2);
     
     if ( choixJeu == 1)
     {
      do
      {
    	  //Nous demandons le niveau choisit par le joueur
    	printf ("Quel niveau choisissez-vous?\n\n1: Entre 1 et 100\n2: Entre 1 et 1000\n3: Entre 1 et 10000\n\n");
    	scanf ("%ld", &choixNiveau);
     
      }while (choixNiveau > 2);
     
    	//Nous faisons appelle a la fonction "choix" et "nombreMystere"
        MAX = choix(choixNiveau, MAX);
        nombreMystere = genereNombre(MAX, MIN, nombreMystere);
     }
     else (choixJeu == 2);
     
    {
        printf (" Que me premier joueur choisisse un chiffre.\n");
        scanf ("%ld", nombreMystere);
     }
     do
        {
            // On demande le nombre
            printf("Quel est le nombre ? ");
            scanf("%ld", &nombreEntre);
    		compteur++;
     
            /*On compare le nombre entré avec le nombre mystere grace a
    		la fonction compare et on renvoie la variable again */
     
            again = compare(nombreMystere, nombreEntre, again, compteur);
     
        } while (nombreEntre != nombreMystere);
       }while ( again != 0);
     
        system("PAUSE");
    }
    esseyé de l'executer et apres le choix du nombre de joueur il s'arrete

    et Mabu pk ne pa utiliser %ld, c'est pour les entier et %lf les decimal me semble-t-il

    encore merci d'avance^^

  6. #6
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut
    Citation Envoyé par Manipulat Voir le message
    esseyé de l'executer et apres le choix du nombre de joueur il s'arrete
    C'est normal, apres le choix du nombre de joueur main() retourne et le programme quitte.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Manipulat Voir le message
    et Mabu pk ne pa utiliser %ld, c'est pour les entier et %lf les decimal me semble-t-il
    J'ai bien dit une bêtise plus grosse que moi... corrigé.

    Il y a bien une erreur sur un scanf, mais ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%ld", nombreMystere);
    il manque un & devant nombreMystere.

    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    }
     else (choixJeu == 2);
    est à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    }
     else if (choixJeu == 2)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    encore un probleme lol

    tou marche bien je choisit le nombre de joueur ( 2 joueur tou marche bien)

    je met un joueur et le programme m'execute les deux if, si choixjeu=1et si choixjeu=2

    Comment cela est-il possible
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
     
    long choix(long choixNiveau,long MAX)
    {
    	 if (choixNiveau == 1)
    		MAX = 100;
    	else if (choixNiveau == 2)
    	    MAX = 1000;
    	else if (choixNiveau == 3)
    	    MAX = 10000;
    	return MAX;
    }
    long genereNombre(long MAX, long MIN, long nombreMystere)
    {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    	return nombreMystere;
    }
    long compare(long nombreMystere, long nombreEntre, long again, long compteur)
    {
        if (nombreMystere > nombreEntre)
                printf("C'est plus !\n\n");
            else if (nombreMystere < nombreEntre)
                printf("C'est moins !\n\n");
            else
    		{
    			printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\n\nVoulez vous recommencer?\n\n oui: 1  non: 0\n\n", compteur);
                scanf ("%ld", &again);
    			return again;
    		}
    }
     
    int main ( int argc, char** argv )
    {
    	//Nous fixons les variables a 0
        long nombreMystere = 0, nombreEntre = 0, compteur = 0, again = 1, MAX = 0, choixNiveau = 0, choixJeu = 0, choixJoueur = 0;
    	const long MIN = 1;
    	//Nous demarrons la boucle du jeu entier
       do
       {
    	   do
    	   {
    	   printf ("Voulez vous jouer a 1 ou 2 joueur?\n");
    	   scanf ("%ld", &choixJeu);
    	   }while (choixJeu < 1 || choixJeu > 2);
     
     if ( choixJeu == 1)
     {
      do
      {
    	  //Nous demandons le niveau choisit par le joueur
    	printf ("Quel niveau choisissez-vous?\n\n1: Entre 1 et 100\n2: Entre 1 et 1000\n3: Entre 1 et 10000\n\n");
    	scanf ("%ld", &choixNiveau);
     
      }while (choixNiveau > 2);
     
    	//Nous faisons appelle a la fonction "choix" et "nombreMystere"
        MAX = choix(choixNiveau, MAX);
        nombreMystere = genereNombre(MAX, MIN, nombreMystere);
     }
     else if (choixJeu == 2);
     {
        printf (" Que le premier joueur choisisse un chiffre.\n");
        scanf ("%ld", &nombreMystere);
     }
     do
        {
            // On demande le nombre
            printf("Quel est le nombre ? ");
            scanf("%ld", &nombreEntre);
    		compteur++;
     
            /*On compare le nombre entré avec le nombre mystere grace a
    		la fonction compare et on renvoie la variable again */
     
            again = compare(nombreMystere, nombreEntre, again, compteur);
     
        } while (nombreEntre != nombreMystere);
       }while ( again != 0);
     
        system("PAUSE");
    }
     
     
    re re merci d'avance

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

Discussions similaires

  1. problème lors de la compilation
    Par snake264 dans le forum Dev-C++
    Réponses: 5
    Dernier message: 14/11/2006, 20h07
  2. Réponses: 4
    Dernier message: 25/09/2006, 10h24
  3. Problème lors de la compilation
    Par nicolas66 dans le forum C++
    Réponses: 9
    Dernier message: 25/07/2006, 22h32
  4. problème lors de la compilation : Unsatisfied symbols
    Par la schtroumpfette dans le forum C
    Réponses: 6
    Dernier message: 29/12/2005, 09h52
  5. Réponses: 7
    Dernier message: 27/09/2005, 21h40

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