Insersion de notes pour un bulletin [Fermé]

Signaler
-
Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021
-
Bonjour,
Je souhaite réaliser une application simple consistant à insérer les notes dans un bulletin, or lorsque je compile sur ma console on ne me permet d'insérer que la première note. voici mon code :
#include <stdio.h>
#include <stdlib.h>
float fr;
float ang;
float philo;
float math;
float phys_chimie;
float svt;
float histgeo;
void InsersionDesNotes()
{
    printf("veuillez inserer les notes: \n");
    printf("\t\t\n fr : "); scanf(" %0.02%f ",&fr);
    printf("\t\t\n anglais : "); scanf(" %0.02%f ",&ang);
    printf("\t\t\n philosophie : "); scanf(" %0.02%f ",&philo);
    printf("\t\t\n math : "); scanf(" %0.02%f ",&math);
    printf("\t\t\n physique et chimie : "); scanf("%0.02%f ",&phys_chimie);
    printf("\t\t\n science et vie de la terre : "); scanf(" %0.02%f ",&svt);
    printf("\t\t\n histoire et géographie : "); scanf("%0.02%f ",&histgeo);
}
int main()
{
    InsersionDesNotes();
}

Merci d'avance pour votre aide

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


1 réponse

Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021
932
Salut mbadih,

Le spécificateur de format
" %0.02%f "
est erroné pour scanf (et même pour printf en fait).

vois http://www.cplusplus.com/reference/cstdio/scanf/

A format specifier for scanf follows this prototype:

%[*][width][length]specifier


et les tableaux qui suivent.

Ce qui ne va pas sur scanf :

- avec scanf, tu ne peux pas mettre de point (contrairement à printf, qui a ses propres formats, qui sont différents de ceux de scanf)
- cela n'a aucun sens de mettre 0 en tant que "width", car cela signifie que tu ne lis, en fait, aucun caractère.
- le "length" dans scanf n'est pas un nombre, mais un spécificateur de taille (vois le tableau de la doc)
- il n'y a qu'un seul %, qui est au début, "specifier" est en dernier et est un spécificateur de type (vois le tableau de la doc) ... il n'y a d'ailleurs pas non plus de % en fin d'expression pour printf ...
- tu devrais enlever l'espace en fin de format, car sinon il va consommer ton retour à la ligne, or, tu en as besoin pour arrêter la saisie
- quant à l'espace en début, que tu as mis parfois, je le supprimerai aussi, mais dans ton cas il n'aura pas vraiment d'impact

Le fait que ton programme compile sans erreur fatale, ne signifie pas qu'il est sans erreurs. En compilant avec les warnings, ton compilateur va se plaindre. Il ne faut pas ignorer les avertissements, ils attirent l'attention sur ce qui est, la plupart du temps, une erreur. Il faut comprendre pourquoi ils se manifestent, et en éliminer la cause.

La prochaine fois, tiens compte de ces warnings et cherche par toi même avec une documentation de référence. Si tu ne trouves vraiment pas pourquoi ils se manifestent, demande de l'aide ici :-)

Enfin :

- ta fonction main doit renvoyer un entier
- double est préféré à float par la bibliothèque standard, alors il est des personnes qui en recommandent l'utilisation par défaut pour des nombres à virgule, sauf cas particuliers nécessitant vraiment un float
- c'est une mauvaise habitude de créer des variables globales


Dal