Erreurs incompréhensibles

Résolu/Fermé
valou576 Messages postés 85 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 1 janvier 2014 - 11 déc. 2012 à 18:47
valou576 Messages postés 85 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 1 janvier 2014 - 12 déc. 2012 à 21:33
SAAAAAALut,

Je suis débutant en programmation, et je veux faire mon programme mais il me met des erreurs un peu bizzarres :s

les erreurs:

|27|error: expected expression before 'int'|
|51|error: 'else' without a previous 'if'|
|53|error: expected expression before 'int'|
|73|error: 'else' without a previous 'if'|
|75|error: expected expression before 'int'|



Le code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( int argc, char** argv )



{
const int MIN = 0;
int prixMax, prixMystere , prixMystere1, prixMystere2, prixEntre = 0;
srand(time(NULL));
printf("Bienvenue dans le juste prix! Le but du jeu est de trouver le bon prix en un minimum de coups!\n");
printf("3 niveaux disponibles, rentre juste le nombre\n");
printf("==| Niveaux disponibles |==\n");
printf("1 | 1 a 100 euros \n");
printf("2 | 1 a 1 000 euros\n");
printf("3 | 1 a 10 000 euros\n");
int niveaux = 0;
scanf("%d", &niveaux);


{


{if (niveaux == 1)

int prixMax = 100;
prixMystere = (rand() % (prixMax - MIN + 1)) + MIN;


do
{


printf ("Rentre un prix: \n");
scanf("%d", &prixEntre); //ça c'est le prix a entrer

if (prixEntre > prixMystere) //si le prix entré est plus grand que le prix a trouver, c'est moins
printf("C'est moins!");
else if (prixEntre < prixMystere) //si le prix entré est moins grand que celui a trouver c'est plus
printf ("C'est plus!");
else //si le prix rentré est égal au nombre mystere..
printf ("C'est gagné!"); //...c'est gagné!

}while (prixEntre == prixMystere);
}




{else if (( niveaux = 2 ))

int prixMax = 1000;
prixMystere1 = (rand() % (prixMax - MIN + 1)) + MIN;

do
{


printf (" Rentre un prix: ");
scanf("%d", &prixEntre);

if (prixEntre > prixMystere1)
printf("C'est moins!");
else if (prixEntre < prixMystere1)
printf ("C'est plus!");
else
printf ("C'est gagné!!!");
}while (prixEntre == prixMystere1);
}

{
else if ((niveaux = 3))

int prixMax = 10000;
prixMystere2 = (rand() % (prixMax - MIN + 1)) + MIN;

do
{


printf ("Rentre un prix: ");
scanf("%d", &prixEntre);

if (prixEntre > prixMystere2)
printf ("C'est moins!");
else if (prixEntre < prixMystere2)
printf ("C'est plus!");
else
printf ("C'est gagné!");

}while (prixEntre == prixMystere2);
}




}



return 0; //fin du programme :)
}






3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
Modifié par fiddy le 11/12/2012 à 21:29
Un vrai foutoir le code ^^.
Pourquoi mets-tu des accolades partout ?
{
{if (niveaux == 1)

int prixMax = 100;
prixMystere = (rand() % (prixMax - MIN + 1)) + MIN;

Pourquoi ici mettre deux accolades avant le if ??
Ne voulais-tu plutôt en mettre une après le if ?

Si tu pouvais revoir tes accolades, tu corrigerais ton problème.
Si tu vois vraiment pas, repose ton code en le mettant dans tes balises "code" (à droite du bouton "souligné").
Et si tu pouvais également nous indiquer à quelles lignes correspondent 27, 51, ... ça serait super.

Google is your friend
0
SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 8
Modifié par SamFish le 11/12/2012 à 21:41
1. La variable prixMax est déjà "typée" à la 3e ligne sous le main et après, tu la redéclare sous chacun des if. C'est possiblement le bug.

Règles de base pour mieux trouver les erreurs :

Indentation (Mais je pense que c'est le forum qui supprime les espaces :

Chaque item sous le main et sous un if ou un while ou un DO est décalé de 4 espaces

EX:

int main ()
{
int X;

do
{
....
}
while (max < 1);

comparaison VS assignation

= VS ==
= assignation
== comparaison pour voir si c'est égal
!= comparaison pour voir si c'est différent de


Donc dans ton if ((niveau = 2)) tu viens de mettre la valeur 2 dans ta variable au lieu de la comparer avec la valeur 2. En plus, 1 seul set de () est nécessaire :

if (niveau == 2)
...
else
...

Simplifcation. Dans ton code, tu reprends 3 fois le même DO...WHILE

Assigne prixMax selon le niveau et ensuite fait le traitement :

if (niveau == 1)
prixMax = 100;
else if (niveau == 2)
prixMax = 1000;
else if (niveau == 3)
prixMax = 10000;

prixMystere = ...

do
{
....
}
while ...

Tu aurais pu aussi ajouter une validation parce que si quelqu'un mets 5, ton programme marchera pas.

printf("1 | 1 à 100 euros \n");
...
printf ("0 quitter\n");

do
{
scanf("\n%d", &niveaux)
if (niveau != 0 && niveau != 1 && niveau != 2 && niveau != 3)
("\n Mauvaise réponse
}
while (niveau != 0 && niveau != 1 && niveau !=2 && niveau != 3)

if (niveau >0)
{
if (niveau == 1)
prixMax = 100;
else if (niveau == 2)
prixMax = 1000;
else if (niveau == 3)
prixMax = 10000;

prixMystere = ...

do
{
....
}
while ...
}

printf ("A la prochaine ....\n");
return 0; //fin du programme :)
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 déc. 2012 à 21:50
La variable prixMax est déjà "typée" à la 3e ligne sous le main et après, tu la redéclare sous chacun des if. C'est possiblement le bug.
Nope, c'est autorisé en C tant que c'est dans des scopes différents, ce qui est le cas ici.

Indentation (Mais je pense que c'est le forum qui supprime les espaces :
Tout à fait, c'est pourquoi il faut mettre son code dans la balise "code" (à droite du bouton "souligné").

En plus, 1 seul set de () est nécessaire :
C'est suffisant, mais pas nécessaire.

Cdlt,
0
valou576 Messages postés 85 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 1 janvier 2014 6
11 déc. 2012 à 22:09
Bon, balise code :)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( int argc, char** argv )



{
const int MIN = 0;
int prixMax, prixMystere , prixMystere1, prixMystere2, prixEntre = 0;
srand(time(NULL));
printf("Bienvenue dans le juste prix! Le but du jeu est de trouver le bon prix en un minimum de coups!\n");
printf("3 niveaux disponibles, rentre juste le nombre\n");
printf("==| Niveaux disponibles |==\n");
printf("1   |   1 a 100 euros \n");
printf("2   |   1 a 1 000 euros\n");
printf("3   |   1 a 10 000 euros\n");
int niveaux = 0;
scanf("%d", &niveaux);


{


{if (niveaux == 1)

        int prixMax = 100;
    prixMystere = (rand() % (prixMax - MIN + 1)) + MIN;


do
{


    printf ("Rentre un prix: \n");
    scanf("%d", &prixEntre);        //ça c'est le prix a entrer

         if (prixEntre > prixMystere) //si le prix entré est plus grand que le prix a trouver, c'est moins
         printf("C'est moins!");
         else if (prixEntre < prixMystere) //si le prix entré est moins grand que celui a trouver c'est plus
         printf ("C'est plus!");
         else //si le prix rentré est égal au nombre mystere..
         printf ("C'est gagné!"); //...c'est gagné!

}while (prixEntre == prixMystere);
}




{else if (( niveaux = 2 ))

    int prixMax = 1000;
    prixMystere1 = (rand() % (prixMax - MIN + 1)) + MIN;

do
{


    printf (" Rentre un prix: ");
    scanf("%d", &prixEntre);

         if (prixEntre > prixMystere1)
         printf("C'est moins!");
         else if (prixEntre < prixMystere1)
         printf ("C'est plus!");
         else
         printf ("C'est gagné!!!");
}while (prixEntre == prixMystere1);
}

{
    else if ((niveaux = 3))

    int prixMax = 10000;
    prixMystere2 = (rand() % (prixMax - MIN + 1)) + MIN;

do
{


    printf ("Rentre un prix: ");
    scanf("%d", &prixEntre);

         if (prixEntre > prixMystere2)
         printf ("C'est moins!");
        else if (prixEntre < prixMystere2)
         printf ("C'est plus!");
         else
         printf ("C'est gagné!");

}while (prixEntre == prixMystere2);
}




}



  return 0; //fin du programme :)
}

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 déc. 2012 à 23:01
T'as oublié de dire à quelles lignes correspondaient les erreurs...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 déc. 2012 à 23:20
J'ai quand même regardé.
Et il y a plein de choses à revoir...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    const int MIN = 0;
    int prixMax, prixMystere , prixMystere1, prixMystere2, prixEntre = 0;
    int niveaux = 0;
    srand(time(NULL));
    printf("Bienvenue dans le juste prix! Le but du jeu est de trouver le bon prix en un minimum de coups!\n");
    printf("3 niveaux disponibles, rentre juste le nombre\n");
    printf("==| Niveaux disponibles |==\n");
    printf("1   |   1 a 100 euros \n");
    printf("2   |   1 a 1 000 euros\n");
    printf("3   |   1 a 10 000 euros\n");

    scanf("%d", &niveaux);

    if (niveaux == 1) {

        prixMax = 100;
        prixMystere = (rand() % (prixMax - MIN + 1)) + MIN;

        do {
            printf ("Rentre un prix: \n");
            scanf("%d", &prixEntre);        /*ça c'est le prix a entrer*/

            if (prixEntre > prixMystere) /*si le prix entré est plus grand que le prix a trouver, c'est moins*/
                printf("C'est moins!");
            else if (prixEntre < prixMystere) /*si le prix entré est moins grand que celui a trouver c'est plus*/
                printf ("C'est plus!");
            else /*si le prix rentré est égal au nombre mystere..*/
                printf ("C'est gagné!"); /*...c'est gagné!*/
        } while (prixEntre != prixMystere);
    }

    else if (( niveaux = 2 )) {
        prixMax = 1000;
        prixMystere1 = (rand() % (prixMax - MIN + 1)) + MIN;
        do {
            printf (" Rentre un prix: ");
            scanf("%d", &prixEntre);

         if (prixEntre > prixMystere1)
            printf("C'est moins!");
         else if (prixEntre < prixMystere1)
            printf ("C'est plus!");
         else
            printf ("C'est gagné!!!");
        }while (prixEntre != prixMystere1);
    }

    else if ((niveaux = 3)) {
        prixMax = 10000;
        prixMystere2 = (rand() % (prixMax - MIN + 1)) + MIN;

        do {
            printf ("Rentre un prix: ");
            scanf("%d", &prixEntre);

            if (prixEntre > prixMystere2)
                printf ("C'est moins!");
            else if (prixEntre < prixMystere2)
                printf ("C'est plus!");
            else
                printf ("C'est gagné!");

        }while (prixEntre != prixMystere2);
    }
    return 0; /*fin du programme :)*/
}

Corrections apportées
En C pas de // pour les commentaires mais /* */
On ne mélange pas code et déclaration. Donc j'ai recollé int niveaux=0; juste après la déclaration des autres variables.
J'ai revu toutes tes accolades. J'ai notamment ajouté des accolades après tes if.
Tu as déclaré plusieurs fois prixMax. Ce n'est pas une erreur en soit, mais je ne pense pas que c'était volontaire.
Tes conditions while, sont fausses : while (prixEntre != prixMystere); au lieu de ==

Sinon, ton code peut être vraiment mieux fichu. Par exemple, tu as des blocs qui se ressemblent (do while...). Tu peux en faire une fonction. Ca sera beaucoup plus lisible.

Je te laisse faire à titre d'entrainement ;-).
0
valou576 Messages postés 85 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 1 janvier 2014 6
12 déc. 2012 à 15:46
Ok merci, juste une question, sur quel site tu as appris le C?
0
SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 8
Modifié par SamFish le 12/12/2012 à 16:53
T'as oublié de dire à quelles lignes correspondaient les erreurs...
Si tu regardes le post original :

|27|error: expected expression before 'int'|
|51|error: 'else' without a previous 'if'|
|53|error: expected expression before 'int'|
|73|error: 'else' without a previous 'if'|
|75|error: expected expression before 'int'|

Les numéros de lignes sont là et ça correspond aux lignes du post original.
J'ai pas regardé que pouvait être l'erreur.
Il faut qu'il travaille un peu quand même

:)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
Modifié par fiddy le 12/12/2012 à 17:02
@SamFish
Les numéros de lignes sont là et ça correspond aux lignes du post original.
J'ai demandé les lignes auxquelles se rapportent les n° lignes. J'ai pas envie de compter jusqu'à 75 son code pour connaître la ligne impactée alors que son compilateur sélectionne très certainement ces lignes.
Mais peu importe, j'ai déjà corrigé son code ;-)

valou576
Ouh là. Bonne question. A l'école essentiellement pour l'apprentissage et la pratique/lecture des forums spécialisés, des normes, etc. pour approfondir.

Mais, tu peux commencer par siteduzero qui me semble un bon début pour l'apprentissage.
0