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égrossir ma fonction qui lit des floats.


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 90
    Points : 66
    Points
    66
    Par défaut Dégrossir ma fonction qui lit des floats.


    Voila pour les besoin de mon tp j'ai crée une fonction qui lit un float strictement positif du clavier, en contrôlant chaque touche appuyer et en ne lassant passé que les 0-9, le point une et une seul fois, Backspace pour effacer, Entrée pour terminé la saisie s'il y a au moins 1 caractère entré, et enfin Echap si l'utilisateur annule la saisie.

    la fct retourne 0 si l'utilisateur annule la saisie.

    La fct semble marcher correctement seulement je la trouve pas tres belle et je ne suis pas sur qu'elle sois sur si vous pouviez m'aider a l'améliorer
    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
    float getFloat()
    {
        int pos = 0;
        float nb = 0.;
        char touche, point = 1, nbStr[500];
        do
        {
            if (kbhit())
            {
                touche = getch();
                if(((touche >= '0' && touche <= '9') || (touche == '.' && point)) && (pos < 499))
                {
                    printf("%c",touche);
                    if(touche == '.') point = 0;
                    nbStr[pos] = touche;
                    pos++;
                    nbStr[pos] = '\0';
                    sscanf(nbStr,"%f",&nb);
                }
                else if (touche == 27)
                {
                    return 0;
                }
                else if (touche == 8 && pos > 0)
                {
                    pos--;
                    if(nbStr[pos] == '.') point = 1;
                    nbStr[pos] = '\0';
                    sscanf(nbStr,"%f",&nb);
                    printf("\b \b");
                }
            }
        }while(touche != 13 || nb == 0.);
        return nb;
    }

  2. #2
    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 disturbedID
    La fct semble marcher correctement seulement je la trouve pas tres belle et je ne suis pas sur qu'elle sois sur si vous pouviez m'aider a l'améliorer
    Elle est surtout horriblement pas portable, ce qui ne se justifie pas pour une fonction de saisie...

    Il faut séparer la saisie de ligne (fgets(), par exemple) de la conversion.

    Ce que tu veux faire, c'est une conversion texte/float. Commence pas ça déjà, tout seul sans saisie. (En gros, tu recodes strtod()).

    P.S. : j'ai relut l'énoncé. Le contrôle de saisie à-la-volée est imposé ? C'est curieux comme exercice, parce que ça oblige à écrire du code non portable... C'est douteux... C'est quoi ton école ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    Pourquoi la fonction n'est pas portable ?

  4. #4
    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 kromartien
    Pourquoi la fonction n'est pas portable ?
    A cause des fonctions de conio (kbhit(), getch()) qui n'existent pas ailleurs que sous DOS/Windows... (Et encore, ce sont des inventions de Borland sous DOS, portées plus ou moins légalement sous Windows...)

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    D'accord.

    Citation Envoyé par Emmanuel Delahaye
    ]P.S. : j'ai relut l'énoncé. Le contrôle de saisie à-la-volée est imposé ? C'est curieux comme exercice, parce que ça oblige à écrire du code non portable... C'est douteux... C'est quoi ton école ?
    [Plainte]Mais alors pourquoi à l'école en 2006 j'ai fait du borland ? Pourquoi pas du C standard ? Surtout que c'était l'école. Après si je me pointais n'importe où où on utilise un peu d'Unix ou de Linux, je me plante directement. Les standards, c'est pas fait pour les chiens[/Plainte]

  6. #6
    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 kromartien
    [Plainte]Mais alors pourquoi à l'école en 2006 j'ai fait du borland ? Pourquoi pas du C standard ? Surtout que c'était l'école. Après si je me pointais n'importe où où on utilise un peu d'Unix ou de Linux, je me plante directement. Les standards, c'est pas fait pour les chiens[/Plainte]
    Je suis bien d'accord avec toi. J'enseigne le C standard.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 90
    Points : 66
    Points
    66
    Par défaut
    C'est pas standard ok, mais j'ai pas trouvé mieux, ou alors c'est vraiment long, mais de toute façon ca doit tourner que sur windows.

    Le contrôle de saisie a la volée n'est pas imposé ce n'est qu'une infime partie du TP (de R.O donc...) mais je trouve ca plus simple que d'afficher un message d'erreur et de demander a l'utilisateur de ressaisir le nombre, ou pas bla bla bla...

    Si je te montre le TP complet tu vas attraper une crise cardiaque, a coup de system("PAUSE") system("CLS")

    Citation Envoyé par Emmanuel Delahaye
    C'est douteux... C'est quoi ton école ?
    Pas touche à mon pote !

Discussions similaires

  1. fonction qui lit un des mots d'une matrice
    Par Francky44003 dans le forum C
    Réponses: 11
    Dernier message: 12/09/2010, 15h02
  2. [VBA][03] Erreur dans une fonction qui vide des tables
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/04/2007, 14h13
  3. Fonction qui totalise des nombres mais met 1 au lieu de 1.5
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2006, 16h05
  4. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24
  5. Creer des fonctions qui émule des fonctions Access
    Par steelidol dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 18h42

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