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
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
A voir également:
- Erreurs incompréhensibles
- Le programme à télécharger ci-dessous contient des erreurs et n'est pas complet. corrigez-le et exécutez-le. quel mot de dix lettres est obtenu ? - Forum Pascal
- Exécuter python pas-à-pas - Forum Python
- Dis-moi dix mots concours ✓ - Forum TV & Vidéo
- Redémarrer pour réparer les erreurs de lecteur ✓ - Forum Windows 8 / 8.1
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 11/12/2012 à 21:29
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
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
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
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 :)
}
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 :)
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 déc. 2012 à 21:50
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,
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,
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
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 :) }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 déc. 2012 à 23:01
11 déc. 2012 à 23:01
T'as oublié de dire à quelles lignes correspondaient les erreurs...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 déc. 2012 à 23:20
11 déc. 2012 à 23:20
J'ai quand même regardé.
Et il y a plein de choses à revoir...
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 ;-).
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 ;-).
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
12 déc. 2012 à 15:46
Ok merci, juste une question, sur quel site tu as appris le C?
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
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
:)
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
:)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 12/12/2012 à 17:02
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.
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.