IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[Débutant] Problème avec un tableau


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [Débutant] Problème avec un tableau
    Bonjour à tous!
    J'ai un petit problème avec un tableau de réels : tous les nombres que j'essaye d'entrer valent 0.

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    printf("\nVeuillez entrer un nombre réel svp...\n");
    scanf("%lf", &temp);
    tableau[ctr] = temp;
    printf("%lf\n", tableau[ctr]);
    Tous les nombres que j'entre dans ce tableau valent 0...
    Ce code se trouve dans une boucle do...while et ctr est incrémenté à chaque passage de boucle.

  2. #2
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Outre le fait que l'utilisation de scanf(), de la manière dont tu le manies, ne soit pas des plus judicieux (utilise plutôt fgets() + strtod() ), il pourrait être intéressant de savoir comment sont définies et allouées tes variables.

    Peux-tu mettre plus de code ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Désolé si mon utilisation du scanf n'est pas très bonne mais je suis vraiment hyper débutant en C. Je dois en fait faire un exercice pour mon cours de C. Le programme doit permettre à l'utilisateur d'introduire jusqu'à 1000 nombres puis calculer la moyenne de tous ces nombres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //Variables
    float tableau[1000];
    float total = 0, moyenne = 0, temp = 0;
    char choix;
    int ctr = 0;
    int i = 0;
     
    printf("\nProgramme qui calcule la moyenne de 1000 réels\n");
     
    //Remplissage du tableau
    do
    {
    	if(ctr < 1000)
    	{
    		printf("\nVeuillez entrer un nombre réel svp...\n");
    		scanf("%lf", &temp);
    		tableau[ctr] = temp;
    		printf("%lf\n", tableau[ctr]);
    		ctr++;
    		printf("Voulez-vous entrer un autre nombre? (O/N)");
    		do
    		{
    			choix = toupper(getch());
    		}while((choix != 'O') && (choix != 'N'));
     
    		printf("%c", choix);
    	}
    	else
    	{
    		printf("Vous avez déja introduit 1000 nombres");
    		choix = 'N';
    		}
     
    	}while (choix != 'N');

  4. #4
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Quelques suggestions:
    • Initialiser toutes tes variables
    • Mettre tes conditions d'arrêt directement dans le while principal


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //Variables
    float tableau[1000] = {0.0};
    float total = 0, moyenne = 0, temp = 0;
    char choix = 'O';
    int ctr = 0;
    int i = 0;
     
    //Remplissage du tableau
    do
    {
    	printf("\nVeuillez entrer un nombre réel svp...\n");
    	scanf("%lf", &temp);
    	tableau[ctr] = temp;
    	printf("%lf\n", tableau[ctr]);
    	ctr++;
     
    	printf("Voulez-vous entrer un autre nombre? (O/N)");
    	do
    	{
    		choix = toupper(getch());
    	}while((choix != 'O') && (choix != 'N'));
    	printf("%c", choix);
     
    } while ( (ctr < 1000) && (choix != 'N') );

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Tous les nombres que j'entre dans ce tableau valent 0...
    Logique, mauvaise utilisation de scanf ....

    Voici une version avec fgets...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #include <ctype.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int main()
    {
    //Variables
    double tableau[1000];
    double temp = 0;
    char buf[128], *add;
    char choix;
    int ctr = 0;
     
    printf("\nProgramme qui calcule la moyenne de 1000 réels\n");
     
    //Remplissage du tableau
    do
    {
    		printf("\nVeuillez entrer un nombre reel svp...\n");
    		if(fgets(buf,sizeof(buf),stdin)!=NULL)  {
                       //A ajouter ici une verification de la chaine si on veut etre
                       //sur qu'il n'y a pas de problemes
    		   temp = strtod(buf,&add);
     
    		   if(buf==add)
    		    {
    		    //Erreur de conversion
     		    fprintf(stderr,"Erreur avec la conversion");
    		    return EXIT_FAILURE;
    		    }
    		}
    		else 
    		{
    		  fprintf(stderr,"Erreur avec l´entree\n");
    		  return EXIT_FAILURE;
    		}
     
    		tableau[ctr] = temp;
    		printf("%lf\n", tableau[ctr]);
    		ctr++;
    		printf("Voulez-vous entrer un autre nombre? (O/N)");
    		do
    		{
    			if(fgets(buf,sizeof(buf),stdin)!=NULL) 
    			{
    			choix = toupper(buf[0]);
    			}
    			else
    			{
    			fprintf(stderr,"Erreur avec l´entree pour le choix\n");
    			return EXIT_FAILURE;
    			}
    		}while((choix != 'O') && (choix != 'N'));
     
    		printf("%c", choix);
    }while ((ctr<1000)&&(choix != 'N'));
     
    return EXIT_SUCCESS;
    }
    Jc

  6. #6
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par fearyourself
    Logique, mauvaise utilisation de scanf ....
    Oui, j'ai du aller lire le man pour voir pourquoi. Pas à dire, utiliser scanf, c'est mal

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pour vos réponses!
    Que voulez-vous dire par "mauvaise utilisation de scanf"?
    J'utilise scanf car c'est la seule methode que le prof nous ait montrée pour récuperer des nombres au clavier...

    fearyourself : je crois que si je montre un code comme le tien à mon prof, il va faire une drôle de tête...

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par salvatore_eice
    Merci beaucoup pour vos réponses!
    Que voulez-vous dire par "mauvaise utilisation de scanf"?
    Je préfére pas le dire sinon tu oublieras tout de suite que c'est mal...

    Lis le man pour le savoir : http://man.developpez.com

    Par contre
    fearyourself : je crois que si je montre un code comme le tien à mon prof, il va faire une drôle de tête...
    Je ne suis pas d'accord, s'il a un problème avec mon code, qu'il vienne sur ce forum et on s'expliquera...

    Il faut bien que les étudiants expliquent aux profs de temps en temps que leur cours n'est pas bon sinon l'éducation n'avancera jamais...

    Jc

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par salvatore_eice
    Merci beaucoup pour vos réponses!
    Que voulez-vous dire par "mauvaise utilisation de scanf"?
    J'utilise scanf car c'est la seule methode que le prof nous ait montrée pour récuperer des nombres au clavier...
    Parce que cette fonction est l'une des plus compliquée à maitriser : http://xrenault.developpez.com/tutoriels/c/scanf/

    Citation Envoyé par salvatore_eice
    fearyourself : je crois que si je montre un code comme le tien à mon prof, il va faire une drôle de tête...
    Oui je le trouve bien compliqué Une simple boucle do...while avec sortie si l'utilisateur tape -1 (ou 'N') suffit.

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par gege2061
    Oui je le trouve bien compliqué Une simple boucle do...while avec sortie si l'utilisateur tape -1 (ou 'N') suffit.
    Eh! Je n'ai fait que reprendre le code de base... Si je devais le faire moi-même j'aurais mis cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int main()
    {
    printf("C'est nul comme programme, qui rentre 1000 nombres pour faire une moyenne?\n");
    return EXIT_SUCCESS;
    }
    Plus sérieusement, j'aurais fait un truc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <ctype.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int main()
    {
        //Variables
        double tableau[5];
        double temp = 0;
        char buf[128], *add;
        unsigned int ctr = 0;
        int fin = 0;
     
        printf("\nProgramme qui calcule la moyenne de 1000 réels\n");
     
        //Remplissage du tableau
        do
        {
            printf("\nVeuillez entrer un nombre reel svp...\n");
            if(fgets(buf,sizeof(buf),stdin)!=NULL)  
            {
     
                temp = strtod(buf,&add);
     
                if(buf==add)
                {
                    //Test de sortie
                    if((buf[0]=='N')||(buf[0]=='n'))
                    {
                        fin = 1;
                    }
                    else
                    {
                        //Erreur de conversion
                        printf("Erreur avec la conversion, si vous voulez sortir tapez N\n");
                    }
                }
                else  //Cas general
                {
                    tableau[ctr] = temp;
                    printf("%lf\n", tableau[ctr]);
                    ctr++;
                }
            }
     
            else 
            {
                fprintf(stderr,"Erreur avec l´entree\n");
                return EXIT_FAILURE;
            }
        }while ((fin==0) && (ctr<sizeof(tableau)/sizeof(tableau[0])));
     
        return EXIT_SUCCESS;
    }
    Jc

  11. #11
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par fearyourself
    Eh! Je n'ai fait que reprendre le code de base... Si je devais le faire moi-même j'aurais mis cela :
    Ah ok, je préfère

    On arrive presque au même résultat (j'suis juste un poil plus agressif avec l'utilisateur qui sais pas lire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <stdlib.h>
    #include <stdio.h>
     
    int main (void)
    {
      double tableau[1000];
      int ctr = 0;
      int done = 0;
     
      printf("\nProgramme qui calcule la moyenne de 1000 reels\n");
      do
      {
        char buf[BUFSIZ];
     
        printf("\nVeuillez entrer un nombre reel svp (N pour sortir) :\n");
        if (fgets (buf, sizeof (buf), stdin) != NULL)
        {
          if (buf[0] != 'n' && buf[0] != 'N')
          {
            char *add = NULL;
            double temp = 0;
     
            temp = strtod (buf, &add);
            if (buf != add)
            {
              tableau[ctr] = temp;
              ctr++;
            }
            else
            {
              fprintf(stderr,"On a dit un nombre ou N !\n");
            }
          }
          else
          {
            done = 1;
          }
        }
        else
        {
          fprintf (stderr, "Erreur avec l´entree\n");
          done = 1;
        }
      } while ((ctr < 1000) && (!done));
     
      return EXIT_SUCCESS;
    }

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par gege2061
    Ah ok, je préfère

    On arrive presque au même résultat (j'suis juste un poil plus agressif avec l'utilisateur qui sais pas lire ) :
    Je ne suis pas d'accord avec ton code en fait, mais juste sur ce point :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            temp = strtod (buf, &add);
            if (buf != add)
            {
              if (temp != -1)
              {
                tableau[ctr] = temp;
                ctr++;
              }
            }
    C'est écrit dans le man de strtod :

    Ces fonctions renvoient la valeur convertie si c'est possible
    Si endptr n'est pas NULL, un pointeur sur le caractère suivant le dernier caractère converti y est stocké.
    Si aucune conversion n'est possible, la fonction renvoie zéro, et la valeur de nptr est stockée dans endptr.
    Si la valeur convertie déclenche un débordement (overflow), la fonction renvoie plus ou moins HUGE_VAL (HUGE_VALF, HUGE_VALL) et errno contient le code d'erreur ERANGE. Si la valeur convertie déclenche un debordement inférieur (underflow), la fonction renvoie 0, et errno contient le code d'erreur ERANGE.
    1) Nul part est-il écrit que la fonction retourne -1 en cas de problème.
    Il faut tester les pointeurs et c'est tout, s'ils sont différents, une conversion a été faite. Après, on peut tester la valeur de add pour voir si *add contient '\0' ce qui veut dire que toute la chaîne a été convertie...

    2) Il ne faut jamais faire une égalité entre nombres flottants. Certes lorsqu'on le fait avec des nombres faciles comme -1,0,1 on ne risque pas grand chose mais il y a un risque, il vaut mieux utiliser fabs et regarder la différence...
    (du moins je préfére ne pas prendre le risque d'un problème)...

    Bien sûr, je peux me tromper (je l'ai déjà fait un certain nombre de fois )
    Jc

  13. #13
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par fearyourself
    Je ne suis pas d'accord avec ton code en fait, mais juste sur ce point :
    Ah non c'est un vieux reste, j'étais partie sur -1 pour sortir mais rien n'interdit de rentrer -1 et comme tu dis tester l'égalité entre deux flottants n'est pas trivial (euh pourquoi fabs, suffit de faire la différence et tester si elle est inférieur à DBL_EPSILON).

    Bon je corrige mon code

  14. #14
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par gege2061
    Ah non c'est un vieux reste, j'étais partie sur -1 pour sortir mais rien n'interdit de rentrer -1 et comme tu dis tester l'égalité entre deux flottants n'est pas trivial (euh pourquoi fabs, suffit de faire la différence et tester si elle est inférieur à DBL_EPSILON).
    Hmmm, et si tu veux tester la distance entre 4 et 5, tu ferais ca toi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double x = 4, y =5;
    if( (x-y)<DBL_EPSILON)
      {
       printf("Ah oui, on réinvente les maths, x et y sont égaux\n");
      }


    Jc

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par gege2061
    Ah non c'est un vieux reste, j'étais partie sur -1 pour sortir mais rien n'interdit de rentrer -1 et comme tu dis tester l'égalité entre deux flottants n'est pas trivial (euh pourquoi fabs, suffit de faire la différence et tester si elle est inférieur à DBL_EPSILON).

    Bon je corrige mon code
    -150000 est inférieur à DBL_EPSILON d'une part, d'autre part DBL_EPSILON est souvent tout aussi inadapté que l'égalité pure quand on compare un nombre à 1 et enfin, il faut mettre à l'échelle parce que dès que les nombres en question sont différent de 1, utiliser DBL_EPSILON n'a plus aucun sens.

  16. #16
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par fearyourself
    Hmmm, et si tu veux tester la distance entre 4 et 5, tu ferais ca toi ?
    Je crois que c'est l'heure de la sieste

    Je préfère même pas expliquer la raison qui m'a conduit à te répondre ça

  17. #17
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    il faut mettre à l'échelle parce que dès que les nombres en question sont différent de 1, utiliser DBL_EPSILON n'a plus aucun sens.
    Pourquoi 1 ?
    Je pensais que DBL_EPSILON permettait de ramener le test d'égalité à un delta [0; DBL_EPSILON[ ?

  18. #18
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Gamdwin
    Pourquoi 1 ?
    Je pensais que DBL_EPSILON permettait de ramener le test d'égalité à un delta [0; DBL_EPSILON[ ?
    DBL_EPSILON, c'est la différence entre le plus petit double représentable supérieur à 1 et 1.

    D'une part, si tu veux verifier que x est égal à DBL_EPSILON, tu ne vas pas comparer la distance qui le sépare de DBL_EPSILON à DBL_EPSILON ou alors tu admets dans ce cas une erreur de 100%.

    D'autre part, avec des flottants binaires, 4 + DBL_EPSILON n'est pas représentable et sera ramené à 4 exactement quelque soit le mode d'arrondi. Là ta manip avec DBL_EPSILON ne sert à rien.

    Enfin, il est des cas où utiliser l'égalité a du sens. Et ça ne dépend pas uniquement des nombres en présence.

    Pour conclure, les flottants, ce n'est pas simple. Si on ne comprend pas ce qu'on fait, il y a de bonnes chances qu'on se goure. On peut donner des règles simples (comme de ne jamais comparer sans seuil), le problème est qu'elles ne sont parfois pas applicables, et quand il faut les appliquer, il y a des détails difficiles (alors, quel seuil on utilise?, ok, maintenant il faut une relation d'ordre qui soit réellement antisymétrique, on fait quoi?)

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par salvatore_eice
    Désolé si mon utilisation du scanf n'est pas très bonne
    scanf() n'est pas une fonction pour débutant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float total = 0, moyenne = 0, temp = 0;
     
    		scanf("%lf", &temp);
    Preuve est faite...

    "%lf" attend l'adresse d'un double et non d'un float...

  20. #20
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Je tiens encore une fois à tous vous remercier pour vos réponses et votre patience. Soyez certains que je ferais bon usage de tous les liens que vous m'avez laissé sur ce post!

    Bonne journée, et vive developpez.com !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [Débutant] Problème avec tableau à deux dimensions
    Par beegees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/12/2006, 14h06
  3. [débutant] problème avec le curseur (sablier)
    Par bat dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2004, 08h26
  4. [débutant] problème avec un "if"
    Par pingoui dans le forum Langage
    Réponses: 10
    Dernier message: 11/08/2004, 09h46
  5. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo