Besoin d'aide code en C

J'ai besoin de votre aide pour mon programme en C svp

Le problème exposé dans ce sujet a été résolu.

Bonjour, alors voilant mon problème étant que, dans mon code lorsqu’il ce déroule pour l’essai 1 tout ce passe bien, mais lorsqu’il passe à l’essaie 2 ce-derniers m’affiche pas la phrase censer ce trouver avant (Veuillez entrer votre nombre de battements cardiaques par minute.) et me demande directement de rentrer la valeur. Je vous met mon code source juste en bas ce seras bien plus simple je pense. Pour information ma variable "condition" sert a verifier que la valeur rentrer dans "battementParMinute" est valide. Merci beaucoup à ceux qui prendront le temps de m’aider et excuser moi des fautes si il y en à.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float battementParMinute = 0;
    int recommencer = 1;
    int condition = 0;

    while (recommencer == 1)
   {
       do
    {

    printf("Veuillez entrer votre nombre de battements cardiaques par minute.\n");
    scanf("%f", &battementParMinute);

    if (battementParMinute > 0 && battementParMinute <= 60)
    {
        condition++;
        printf("Le pacemaker se mettra en position 1.\n\n");
    }
    else if (battementParMinute >= 61 && battementParMinute <= 80)
    {
        condition++;
        printf("Vous n'avez pas besoin de pacemaker.\n\n");
    }
    else if (battementParMinute > 80)
    {
        condition++;
        printf("Le pacemaker se mettra en position 2.\n\n");
    }
    else
    {
        printf("Veuillez entrer une valeur valide. \nLe pouls d'un etre humain en bonne santee est generalement compris entre 60 et 80 battements par minute.\n\n");
    }
   }while (condition == 0);

    condition = 0;
    printf("Voulez vous refaire un test ? Si oui entrer 1, sinon entrer 0.\n\n");
    scanf("%d\n", &recommencer);
   }

    return 0;
}
+0 -0

Salut Steeve.

Je me suis permis de mettre les balises de code, c’est plus lisible. Le titre du sujet est pas super clair non plus, c’est pas cool :(


Enfin bref, le problème est tout bête ^^
Dans ton code ligne 41. Le scanf de recommencer, tu demandes à ce que l’utilisateur entre un nombre, puis "\n". Du coup, il doit faire Entrée deux fois.

La solution, c’est juste de retirer le '\n' dans le scanf. C’est à dire faire ceci :

    condition = 0;
    printf("Voulez vous refaire un test ? Si oui entrer 1, sinon entrer 0.\n\n");
    scanf("%d", &recommencer);

À la ligne 3, j’ai remplacé "%d\n" par "%d" … Ouais c’est subtile ^^"

Bonne journée ^^

PS: Ah ! Je vois que tu as déjà posé la question sur OC !
On est plus réactif sur ZdS :lol:

+0 -0

Merci beaucoup ache, mon problème été effectivement tout bête, vraiment désolé pour mon titre et surtout pour les balises… C’est la première fois pour moi que je demande de l’aide sur 1 forum mais ça ne sera surement pas la dernière sur votre forum car j’aime beaucoup et je vais évidemment prendre en compte tes critiques pour m’améliorer. Merci encore ! :)

Salut,

Je rajoute que int main() n’est pas valide (utilise plutôt int main(void)) et que tu devais mieux indenter ton code pour le rendre plus lisible.

+0 -0

Oui, c’est vrai que techniquement int main() n’est pas un point d’entrée standard.

Sinon, pour rester dans les remarques constructives.

  • De nos jours, il n’y a vraiment aucune raison d’utiliser des float. On utilise toujours double. C’est plus précis, ça prend le double de l’espace mais tant pis, on est plus à ça pres de nos jours ¯_(ツ)_/¯

  • Pour tes conditions, tu pouvais directement faire :

     if (battementParMinute > 0 && battementParMinute <= 60) {
     // [...]
     }
     else if (battementParMinute <= 80) {
     // [...]
     }
     else {
     // [...]
     }
    

    Et vérifier le retour de scanf à sa valeur de retour. Avec par exemple :

    int ret = 0;
    ret = scanf("%f", &battementParMinute);
    
    if (ret != 1) {
        printf("Veuillez entrer une valeur valide. \nLe pouls d'un etre humain en bonne santee est generalement compris entre 60 et 80 battements par minute.\n\n");
    }
    

    En fait, scanf c’est dur à utiliser correctement car du coup, quand l’entrée est invalide, il faut la vider. Avec une fonction du type :

    int viderBuffer(void) {
       int c;
       while( c = getchar(), c != EOF && c != '\n' );
    }
    

    À appeler à chaque fois qu’il y a un problème.

  • Le dernier retour de la fonction main est généralement return EXIT_SUCCESS;.

Voilà, rien de grave en soit.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte