Code :
- int entierLu(int entier) {
- do{
- printf("Nombre entier strictement positif : " );
- scanf("%d", &entier);
- } while (entier <= 0);
- return entier;
- }
|
La chose la plus évidente c'est que la signature de la première fonction est fausse : en plus du type, le paramètre passé est inutile.
Code :
- int entierLu(void) {
- int entier;
- do {
- printf("Nombre entier strictement positif : " );
- scanf("%d", &entier);
- } while (entier <= 0);
- return entier;
- }
|
Ensuite, rien ne te dit que scanf a fonctionné correctement.
Code :
- int entierLu(void){
- int entier;
- int read;
- do {
- printf("Nombre entier strictement positif : " );
- read = scanf ("%d", &entier);
- } while ((read != 1) && (entier <= 0));
- return entier;
- }
|
C'est pas encore parfait, mais ça devrait satisfaire celui qui a posé l'exercice.
Pour être parfait, un printf d'une chaine sans \n final risque de ne pas être flushée, donc un coup de fflush c'est pas plus mal, et comme tu as une boucle, en cas d'erreur, nettoyer stdin avant le nouveau tour de scanf peut être une bonne idée. Bref, on en arrive a ceci, qui est correctement blindé à priori.
Code :
- int entierLu(void) {
- int entier;
- int read;
- do {
- printf("Nombre entier strictement positif : " );
- fflush(stdout);
- read = scanf("%d", &entier);
- int c;
- while ((c = getchar()) != '\n' && c != EOF) { }
- } while ((read != 1) && (entier <= 0));
- return entier;
- }
|
Et à cette étape, il manque quoi? la doc!
Code :
- /* entierLu renvoie un entier saisi à la console.
- cet entier doit être strictement positif, et la fonction boucle tant que
- ce qui est saisi à la console est incorrect. */
- int entierLu(void) {
- int entier;
- int read;
- do {
- printf("Nombre entier strictement positif : " );
- fflush(stdout);
- read = scanf("%d", &entier);
- int c;
- while ((c = getchar()) != '\n' && c != EOF) { }
- } while ((read != 1) && (entier <= 0));
- return entier;
- }
|
Je corrige pas le reste, mais le bon code final pourrait ressembler à ceci :
Code :
- int main(void) {
- afficheSomme(sommeCarres(entierLu()));
- return 0;
- }
|
A+,
Message édité par gilou le 18-08-2019 à 21:30:11
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --