[CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Voir le sujet précédent Voir le sujet suivant Aller en bas

[CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Jiraiya-08 le Mar 07 Oct 2008, 21:15

Salut tout le monde :-D


Voici un code pour tester mon problème:

Code:

#include <stdio.h>
#include <stdlib.h>
#include "typesCommuns.h"
#include "smb01.h"

int main(){
    Date d;
    int i =0;

    printf("Debut test\n\n");

    //printf("\nEntrer un entier: ");
    //scanf("%u", &i);
    //printf("\nAvec le Scanf: i = %u\n\n", i);

    i = getIntFromKB(1, 100);
    printf("\nAvec le getIntFromKB: i = %u\n\n", i);

    //printf("\nEntrer un entier: ");
    //scanf("%u", &i);
    //printf("\nAvec le Scanf: i = %u\n\n", i);

    d = getDateFromKB();
    printf("\n\ndate = %2u/%2u/%4u\n\n", d.jour, d.mois, d.annee);

    printf("\nFin Fonction\n");
    return(0);
}// end - main

En mettant les scanf en commentaire, voilà ce qui se passe:

Code:

Debut test


Introduisez un entier appartenant a [1,100] : 32

Avec le getIntFromKB: i = 32

Introduisez 3 entiers non signes annee,mois,jour : 2008, 10, 7


date = 7/10/2008


Fin Fonction

Process returned 0 (0x0)  execution time : 23.603 s



Alors qu'avec les 2 scanf effectifes, voilà ce qui se passe:

Code:

Debut test


Entrer un entier: 12

Avec le Scanf: i = 12

Introduisez un entier appartenant a [1,100] : Erreur !
Introduisez un entier appartenant a [1,100] : 32

Avec le getIntFromKB: i = 32

Entrer un entier: 74

Avec le Scanf: i = 74

Introduisez 3 entiers non signes annee,mois,jour : Erreur !
Introduisez 3 entiers non signes annee,mois,jour : 2008, 10, 7


date =  7/10/2008


Fin Fonction

Process returned 0 (0x0)  execution time : 46.250 s



Comme vous le voyez, il se passe un bug:
Introduisez un entier appartenant a [1,100] : Erreur !

et

Introduisez 3 entiers non signes annee,mois,jour : Erreur !


Cela est causé par scanf. Or, j'ai besoin dans mon TD1 une lecture au clavier avant l'appelle de chaque fonction. Comment faire pour lire un entier sans provoquer ce bug, sans utiliser de scanf ?


Merci pour votre aide :-D

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Dark le Mar 07 Oct 2008, 21:56

essaies fgets ou sscanf

Dark

Nombre de messages : 131
Age : 30
Prénom : Laurent
Statut : Etudiant
Date d'inscription : 15/05/2006

http://membres.multimania.fr/dark0502/

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Wark le Mar 07 Oct 2008, 22:04

Tu n'as pas besoin de demander d'entrer quelque chose au clavier dans le TD1, les méthodes fournies dans le smb01.o permettant déjà d'introduire des données au clavier. Wink

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Jiraiya-08 le Mar 07 Oct 2008, 22:39

Nan c'est juste parce que j'ai fait un espèce de menu dans le main ou on rentre un nombre pour lancer le teste de chacunes des méthodes demandées Smile


Sinon, bien évidemment, je lis les int et les Date avec les 2 fonctions données Wink

@Wark: D'après leur man respectifs, ce sont toutes les 2 des fonctions qui utilisent des buffers, et qui "lise" uniquement une chaine (cas du fgets), alors que le scanf me permet d'avoir directement une demande qui boucle tant que ce qui est lu n'est pas du type voulu, et cela m'arrange vraiment ^^

Sinon, si vous savez pourquoi ca fais ca, je suis preneur Wink


Dernière édition par Jiraiya-08 le Mar 07 Oct 2008, 23:41, édité 1 fois

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  smb le Mar 07 Oct 2008, 23:07

Si j'ai fait des fonctions pour prendre des infos au clavier, c'est pour qu'on les utilise !
J'ai dit à mes étudiants de ne pas utiliser scanf qui est une très mauvaise fonction (aucune validation) Evil or Very Mad !
De plus, mélanger scanf avec mes fonctions pose effectivement un problème Twisted Evil .

Une solution existe (pour ces problèmes en tout cas) : ajouter fflush(stdin); après chaque scanf. Very Happy

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Jiraiya-08 le Mar 07 Oct 2008, 23:38

Merci beaucoup :-D

En fait, c'est que je ne voulais avoir le message générer par votre fonction lors de la lecture. De plus, votre fonction demande 2 limites, ce qui n'est pas toujours utile voir sensé pour les lectures au clavier ("Entrer un nombre entier"...). C'est pour ces raisons là que j'avais opté pour le scanf.


Sinon, pourquoi le bug est-il présent ? Cela est-il du au fait que scanf laisse "quelque chose" dans le buffer de lecture ?

Merci pour votre aide Smile

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  smb le Mar 07 Oct 2008, 23:51

Poser la question c'est y répondre !
Bonne continuation.

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  nvs le Mer 08 Oct 2008, 07:54

Jiraiya-08 a écrit:[...] le scanf me permet d'avoir directement une demande qui boucle tant que ce qui est lu n'est pas du type voulu [...]
tout d'un coup, c'est moi qui suis intéressé. tu peux m'expliquer ça -- surtout le directement Wink





_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] TD1 - smb01.o: getIntFromKB et getDateFromKB répétent

Message  Contenu sponsorisé Aujourd'hui à 10:51


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum