problème de programmation

problème de programmation - C - Programmation

Marsh Posté le 20-07-2010 à 09:31:43    

bonjour a tous ! voila mon problème : enfait je suis nouveau dans le domaine de la programmation, et j'utilise comme logiciel code::blocks. et la, j'essaie de faire un petit programme et il me met une erreur que je ne vois pas, voilamon programme :  
 
#include <stdlib.h>
#include <time.h>
 
int main()
{
    const int MAX = 100, MIN = 1;
    int nombreMystere, nombreATrouver = 0;
 
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
 
    printf("aller on va jouer a mon tout premier jeu ! sa consiste a trouver le nombre mystere !!" );
    do
    {
    printf("donnez moi votre nombre : " );
    scanf("%d", &nombreATrouver);
 
    if (nombreMystere = nombreATrouver);
    {
        printf("bravo !! c'est le bon nombre !" );
    }
   else  
    {
       while (nombreMystere != nombreATrouver);
    }
    }
 
}
 
 
et le logiciel me met qu'il y a une erreur a la ligne 23 ( je cite l'erreur) : syntax error before "else" mais avant else y a rien  :??: et a la fin de la ligne 22 je ne voit rien. voyez vous le problème ??
 
 
merci d'avance de vos réponse
 
arty


Message édité par artydu34 le 20-07-2010 à 09:35:50
Reply

Marsh Posté le 20-07-2010 à 09:31:43   

Reply

Marsh Posté le 20-07-2010 à 09:44:25    

Au lieu de

printf("aller on va jouer a mon tout premier jeu ! sa consiste a trouver le nombre mystere !!" );

Ecrire

printf("Aller ! On va jouer à mon tout premier jeu ! Ca consiste à trouver le nombre mystère !" );

 
 
Au lieu de

  if (nombreMystere =

Ecrire

  if (nombreMystere ==


 
Au lieu de

nombreATrouver);

Ecrire

nombreATrouver)

Ce point virgule, en trop, met fin à ce qui suit le if. A cause de cela, l'accolade suivante démarre un nouveau bloc qui n'a rien à voir avec le if, puisque le if est terminé par ce point virgule. Il est possible de créer un bloc entre accolades à n'importe quel endroit, indépendamment d'un if. Puis, le compilateur voit le else et ne comprend plus rien, car le if est terminé depuis longtemps par le point virgule en trop.
 
Déplacer plus bas la ligne

 while (nombreMystere != nombreATrouver);


Message édité par olivthill le 20-07-2010 à 09:55:38
Reply

Marsh Posté le 20-07-2010 à 09:52:42    

merci de ton aide précieuse et très rapide qui a dailleurs résolu ce problème mais maintenant j'ai un autre  
problème ... voila l'endroit ou ça ce passe :
 
 
else
    {
       while (nombreMystere != nombreATrouver);
    }
    }
} <<
 
et code::blocks me dit error : syntax error before '}' token (celui de la fin ou il y a << que j'ai rajouter ici, ce n'est donc pas sur le programme x) )
 
PS : désoler d'être nul en programmation ^^


Message édité par artydu34 le 20-07-2010 à 09:54:52
Reply

Marsh Posté le 20-07-2010 à 09:58:00    

Oui, j'ai vu cette erreur du while avec un peu de retard, et j'ai édité mon message. Le mieux serait de revoir la syntaxe du while, parce qu'il y a plusieurs cas à connaitre, et surtout, parce que ce cela ne se met pas dans un else.

Reply

Marsh Posté le 20-07-2010 à 10:01:36    

c'est a dire que je met le while en dessous de else (après }) ? mais je met quoi dans else alors ?

Reply

Marsh Posté le 20-07-2010 à 10:25:45    

ba après avoir un peu bidouiler le programme sa met encore une autre erreur --" voila le programme :
 
else if (nombreMystere > nombreATrouver);
        printf("c'est plus !! \n\n" );
 
    else (nombreMystere < nombreATrouver);
        printf("c'est moin !! \n\n" );
 
    } while (nombreMystere != nombreATrouver);
}
 
et ça ma met l'erreur : error : syntax error before "else"

Reply

Marsh Posté le 20-07-2010 à 10:40:32    

Attention aux points virgules ! C'est très important en C. Il faut revoir le cours.


Message édité par olivthill le 20-07-2010 à 10:40:47
Reply

Marsh Posté le 20-07-2010 à 10:47:55    

c'est a dire ?

Reply

Marsh Posté le 20-07-2010 à 11:04:23    

c'est bon j'ai copier coller le morceau ou il y avait le problème et sa marche. merci beaucoup pour ton aide olivthill =)

Reply

Marsh Posté le 20-07-2010 à 11:10:11    

C'est à dire qu'on a le droit de mettre un point virgule à la fin d'un if, mais qu'il ne faut jamais le faire, sauf dans des cas très très particuliers.
 
En informatique, il faut être très rigoureux, y compris sur la ponctuation (et vous ne semblez pas être très rigoureux sur votre écriture, quand on voit vos absences de majuscules en français).
 
J'ai édité ma première réponse pour expliquer un peu plus le problème du point virgule. Ce sont des choses qui ne s'inventent pas, mais qu'il faut savoir. Donc, je vais expliquer encore d'avantage ici :
 
Après un if, on a soit un bloc entre accolades, soit une ligne terminée par un point virgule. Dans ce dernier cas, une ligne terminée par un point virgule peut être juste un point virgule sans rien avant. Alors, un point virgule tout seul est parfois considéré comme étant équivalent à un bloc entier. C'est pour cela qu'il ne faut pas en mettre à la fin d'un if.
 
Edit : Et que viennent faire ici des parenthèses après le else. Arghh, je m'étrangle. Il faut des accolades, pas des parenthèses. Faîtes attention aux détails.


Message édité par olivthill le 20-07-2010 à 11:14:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed