Probleme de boucle en language C
Résolu
strixdev
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un problème en langage C, j'ai fais une condition pour que la boucle s'exécute, mais quand la condition est vrai, la boucle ne s'exécute pas même si le programme se compile bien.
bon le but du programme c'est de donner deux nombre et ensuite on affiche des choix de somme et produit ...., et ensuite on demande a l'utilisateur de choisir un seul choix, quand le résultat s'affiche, on demande a l'utilisateur de taper [o] pour reprendre le programme, si non il tape n'importe quelle touche.
Voila le code source:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float nombre1 = 0, nombre2 = 0, somme = 0, produit = 0, min = 0, max = 0, division = 0, moyenne = 0;
int choix = 0;
char reponse = 'o';
while (reponse == 'o')
{
printf("Taper le 1er nombre : ");
scanf("%f", &nombre1);
printf("Taper le 2eme nombre : ");
scanf("%f", &nombre2);
printf("\n\n");
printf("** Pour la somme taper 1 **\n");
printf("** Pour le produit taper 2 **\n");
printf("** Pour la moyenne taper 3 **\n");
printf("** Pour la division taper 4 **\n");
printf("** Pour le minimum taper 5 **\n");
printf("** Pour le maximum taper 6 **\n\n");
printf("Entrer votre choix : ");
scanf("%d", &choix);
if (choix == 1)
{
somme = nombre1 + nombre2;
printf("La somme est: ");
printf("%f + %f = %f\n", nombre1, nombre2, somme);
}
else if (choix == 2)
{
produit = nombre1 * nombre2;
printf("Le produit est: ");
printf("%f * %f = %f\n", nombre1, nombre2, produit);
}
else if (choix == 3)
{
moyenne = (nombre1 + nombre2) / 2;
printf("La moyenne est: ");
printf("%f + %f = %f\n", nombre1, nombre2, moyenne);
}
else if (choix == 4)
{
division = nombre1 / nombre2;
printf("La division est: ");
printf("%f / %f = %f\n", nombre1, nombre2, division);
}
else if (choix == 5)
{
if (nombre1 > nombre2)
{
printf("Le minimum est: ");
printf("%f\n", nombre2);
}
else if (nombre1 < nombre2)
{
printf("Le minimum est: ");
printf("%f\n", nombre1);
}
}
else if (choix == 6)
{
if (nombre1 > nombre2)
{
printf("Le maximum est: ");
printf("%f\n", nombre1);
}
else if (nombre1 < nombre2)
{
printf("Le maximum est: ");
printf("%f", nombre2);
}
}
printf("Pour continuer taper [o] sinon taper n'importe quelle touche: ");
scanf("%c", &reponse);
printf("%c", reponse);
getchar();
}
system("PAUSE");
return 0;
}
Merci d'avance
j'ai un problème en langage C, j'ai fais une condition pour que la boucle s'exécute, mais quand la condition est vrai, la boucle ne s'exécute pas même si le programme se compile bien.
bon le but du programme c'est de donner deux nombre et ensuite on affiche des choix de somme et produit ...., et ensuite on demande a l'utilisateur de choisir un seul choix, quand le résultat s'affiche, on demande a l'utilisateur de taper [o] pour reprendre le programme, si non il tape n'importe quelle touche.
Voila le code source:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float nombre1 = 0, nombre2 = 0, somme = 0, produit = 0, min = 0, max = 0, division = 0, moyenne = 0;
int choix = 0;
char reponse = 'o';
while (reponse == 'o')
{
printf("Taper le 1er nombre : ");
scanf("%f", &nombre1);
printf("Taper le 2eme nombre : ");
scanf("%f", &nombre2);
printf("\n\n");
printf("** Pour la somme taper 1 **\n");
printf("** Pour le produit taper 2 **\n");
printf("** Pour la moyenne taper 3 **\n");
printf("** Pour la division taper 4 **\n");
printf("** Pour le minimum taper 5 **\n");
printf("** Pour le maximum taper 6 **\n\n");
printf("Entrer votre choix : ");
scanf("%d", &choix);
if (choix == 1)
{
somme = nombre1 + nombre2;
printf("La somme est: ");
printf("%f + %f = %f\n", nombre1, nombre2, somme);
}
else if (choix == 2)
{
produit = nombre1 * nombre2;
printf("Le produit est: ");
printf("%f * %f = %f\n", nombre1, nombre2, produit);
}
else if (choix == 3)
{
moyenne = (nombre1 + nombre2) / 2;
printf("La moyenne est: ");
printf("%f + %f = %f\n", nombre1, nombre2, moyenne);
}
else if (choix == 4)
{
division = nombre1 / nombre2;
printf("La division est: ");
printf("%f / %f = %f\n", nombre1, nombre2, division);
}
else if (choix == 5)
{
if (nombre1 > nombre2)
{
printf("Le minimum est: ");
printf("%f\n", nombre2);
}
else if (nombre1 < nombre2)
{
printf("Le minimum est: ");
printf("%f\n", nombre1);
}
}
else if (choix == 6)
{
if (nombre1 > nombre2)
{
printf("Le maximum est: ");
printf("%f\n", nombre1);
}
else if (nombre1 < nombre2)
{
printf("Le maximum est: ");
printf("%f", nombre2);
}
}
printf("Pour continuer taper [o] sinon taper n'importe quelle touche: ");
scanf("%c", &reponse);
printf("%c", reponse);
getchar();
}
system("PAUSE");
return 0;
}
Merci d'avance
A voir également:
- Probleme de boucle en language C
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Autocad 2010 language pack french download - Forum AutoCAD
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
2 réponses
Salut!
Il faut vider le flux d'entrée avant de refaire scanf ("%c", &reponse);
Tu met dans reponse : \n !!!! et pas 'o'
getchar();
printf("Pour continuer taper [o] sinon taper n'importe quelle touche: ");
scanf("%c", &reponse);
Ça devrait marcher.
Nota tes accolades me semblent déséquilibres dans ton code
Il faut vider le flux d'entrée avant de refaire scanf ("%c", &reponse);
Tu met dans reponse : \n !!!! et pas 'o'
getchar();
printf("Pour continuer taper [o] sinon taper n'importe quelle touche: ");
scanf("%c", &reponse);
Ça devrait marcher.
Nota tes accolades me semblent déséquilibres dans ton code
Bonjour,
Avant ton scanf("%c", &reponse); mets un getchar();
Cela enlèvera le résidu de caractère trainant dans le buffer clavier et qui fait échouer la boucle.
Sinon deux conseils : utilise plutôt double et au lieu de scan("%c",&reponse) utilise reponse=getchar();
Je n'ai pas regardé le code en détail car il est illisible. Merci d'utiliser les balises codes (à droite du bouton souligné).
Cdlt,
Avant ton scanf("%c", &reponse); mets un getchar();
Cela enlèvera le résidu de caractère trainant dans le buffer clavier et qui fait échouer la boucle.
Sinon deux conseils : utilise plutôt double et au lieu de scan("%c",&reponse) utilise reponse=getchar();
Je n'ai pas regardé le code en détail car il est illisible. Merci d'utiliser les balises codes (à droite du bouton souligné).
Cdlt,
ne vaut-il mieux pas mettre fflush(stdin); ?
Ma prof de C nous a toujours dit d'utiliser cette méthode, elle ne nous a jamais parlé du getchar(); comme méthode équivalente à fflush(stdin); .
Lequel est le plus correct et le plus professionnel ?
ne vaut-il mieux pas mettre fflush(stdin); ?
Non. Et pour la simple raison que fflush() a un comportement indéfini sur les flux d'entrée comme stdin. fflush(stdin) ne doit jamais apparaître dans un programme.
Ma prof de C nous a toujours dit d'utiliser cette méthode
Beh elle se trompe...
Lequel est le plus correct et le plus professionnel ?
La version officielle est la boucle suivante :
Je te conseille d'en faire une petite fonction statique que tu pourras utiliser à ta guise.
Cdlt,