Programme en c:quelle est la faute?

Résolu/Fermé
informatiquetech Messages postés 225 Date d'inscription mercredi 14 janvier 2015 Statut Membre Dernière intervention 29 février 2016 - Modifié par Whismeril le 14/01/2015 à 17:16
Nero15 Messages postés 2657 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 18 janvier 2015 - 18 janv. 2015 à 18:51
bonjour, pouvez-vous me dire pourquoi mon programme ne marche pas comme je veux.
le voici:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int nombresaisi=0;
    int nombre=0;
    printf("saisissez un nombre: ");
    scanf("%d \n", &nombre);
    printf("quel est le nombre?");
    scanf("%d \n", &nombresaisi);
        while (nombresaisi > nombre)
         {
             printf("ton nombre est plus grand \n");
             printf("quel est le nombre?");
             scanf("%d \n", &nombresaisi);
         }
           while (nombresaisi < nombre)
         {
             printf("ton nombre est plus petit \n");
             printf("quel est le nombre?");
             scanf("%d \n", &nombresaisi);
         }
            while (nombresaisi == nombre)
         {
             printf("bravo tu l'as trouve");
         }
}

quand je l'exécute si j'ai faux deux fois environ le programme ferme et parfois il me dit que j'ai juste alors que c'est faux.Merci en tout cas.

EDIT: Ajout de la coloration syntaxique.

2 réponses

Zephirr Messages postés 316 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 6 novembre 2015 100
14 janv. 2015 à 21:00
Il faut mettre une seule boucle
while( nombresaisi != nombre)  
avec des conditions
if
dedans.
0
informatiquetech Messages postés 225 Date d'inscription mercredi 14 janvier 2015 Statut Membre Dernière intervention 29 février 2016 6
Modifié par informatiquetech le 16/01/2015 à 21:30
merci beaucoup, mais pourquoi? Est ce qu'on ne peut pas utiliser beaucoup de boucles et de conditions.
C'est comme ceci:#include <stdio.h>
#include <stdlib.h>

void main()
{
double nombresaisi=0, nombre=0;
printf("saisissez un nombre: ");
scanf("%f", &nombre);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("quel est le nombre? ");
scanf("%f", &nombresaisi);
printf("\n");
while (nombresaisi!=nombre)
{
if (nombresaisi>nombre)
{
printf("ton nombre est plus grand.");
printf("\n");
printf("quel est le nombre? ");
scanf("%f", &nombresaisi);
printf("\n");
}
else if (nombresaisi<nombre)
{
printf("ton nombre est plus petit.");
printf("\n");
printf("quel est le nombre? ");
scanf("%f", &nombresaisi);
printf("\n");
}
}
if (nombresaisi==nombre)
{
printf("bravo tu l'as trouve ");
}
printf("tu as gagne");
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 janv. 2015 à 22:37
C'est pas une question de pas pouvoir, c'est une question de non-sens algorithmique.

Pourquoi avoir remplacé int main() en void main() ?
Du coup, tu as rajouté plein de fautes dans ce programme...

scanf("%f", &nombre);
Il faut mettre %lf (L minuscule).
Pareil pour tous les scanf().

while (nombresaisi!=nombre)
Pas terrible la comparaison entre deux doubles. Il faut plutôt vérifier que la différence entre les deux n'est pas suffisamment petite.

printf("tu as gagne");
Il faut le mettre juste en dessous de : printf("bravo tu l'as trouve").

Il faut utiliser un compteur aussi. Car là en état, le joueur ne peut pas perdre.
N'oublie pas de mettre un printf("\n"); juste au dessus du return 0; pour vider le buffer écran.

Note : n'oublie pas d'utiliser la balise <code c> pour poster ton code la prochaine fois. Exemple :
<code c>ici tu mets ton code</code>
Cdlt,
0
Nero15 Messages postés 2657 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 18 janvier 2015 104
18 janv. 2015 à 18:51
Bonjour,

Ça ne marche pas car dés que les conditions de tes boucles ne sont pas vérifiés tu sors de la boucle en question sans y revenir pour passer au reste du code, une fois sorti des trois boucles le programme termine, ce qui explique ton résultat.

pour une solution propre, prend exemple des codes donnés plus haut ;)

cordialement.
0