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 :

vérification si variable int vide ou pas


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut vérification si variable int vide ou pas
    Salut à tous.
    Comment je pourrais vérifier si une variable int est vide ou pas ? si on a pas encore donné une valeur.

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Tu ne peux pas, mais tu peux fixer une valeur "sentinelle" à l'initialisation comme -1 ou 0. Ou encore utiliser un type "option".

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Une variable, même non initialisée possède une valeur. Tu peux le vérifier simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <iostream>
    int main() {
       int i;
       std::cout << i << std::endl;
       return 0;
    }
    Si tu as vraiment besoin d'une variable qui ne possède pas de valeur quand non initialisée, tu peux utiliser boost::optional.

  4. #4
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut
    Merci pour les réponses.


    L'application sera utiliser en cgi pour faire un site web.

    Parfois depuis le visiteur, parfois depuis la base de donnée, j'ai des valeurs vide qui viennent.

    Et je dois faire des vérifications pour faire les bonnes actions.

    Sachant que pour un site web, on a pas mal de variable int à vérifier, je sais pas quel bonne méthode choisir.


    (En langage C c'est pareil ?)

  5. #5
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Tout dépend de l'interface avec laquelle tu récupères tes valeurs, en consultant la documentation tu peux savoir comment faire.

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    En général, pour représenter une valeur vide, on utilise une paire <booléen, valeur>. Le booléen est à vrai si la valeur est initialisée (par exemple, on peut aussi utiliser la convention inverse, le tout est de s’y tenir). boost optional est une solution, d’autant que comme c’est juste un en-tête, ce n’est pas un problème à rajouter dans un projet.

    Les solutions à base de valeur magiques ne sont pas géniales, et posent pas mal de problèmes, sauf si tu as la garantie que ta valeur « magique » est en dehors de l’intervalle des valeurs possibles (mais dans tous les cas, ce sera peu lisible).

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kripteks Voir le message
    (En langage C c'est pareil ?)
    Oui, c'est pareil en C, et dans beaucoup d'autres langages (PHP, java pour les types primitifs, etc.).
    L'idée c'est que les types primitifs ne correspondent à rien d'autre qu'un morceau de mémoire. L'identifiant d'une variable détermine l'adresse de la variable (où est-elle stockée), son type détermine sa taille (le nombre de bits utilisés pour représenter sa valeur).
    Donc, puisqu'une variable (dans le cas où son type est primitif) correspond à un morceau de mémoire, c'est à dire une série de bits, et que ces bits ont tous obligatoirement une valeur (0 ou 1), une variable a obligatoirement une valeur. D'où la distinction entre la déclaration et l'initialisation d'une variable. Lorsqu'on déclare une variable, on lui donne une adresse et un taille. Lorsqu'on l'initialise, on lui donne une valeur. En C++, une bonne pratique consiste à faire les deux en même temps, systématiquement: lorsqu'on déclare une variable, on l'initialise (ce qu'on ne peut pas faire en C):
    Dans ton cas, pour formaliser ce qui a déjà été dit, il y a 3 solutions possibles:
    1. Utiliser une valeur par défaut pour chacune de tes variables. Cette valeur sera utilisée pour l'initialisation (en même temps que la déclaration donc). Inconvénient: il faut que cette valeur soit choisie de façon à ce que la variable ne puisse jamais être assignée à cette valeur autre part qu'à son initialisation.
    2. Encapsuler tes variables pour les lier avec un champ dédié. Le simple est une paire (std::pair<bool, LeTypeDeMaVariable>) dont le premier élément (le booléen) détermine si la variable a été initialisée. Inconvénient: petite perte de performance.
    3. Utiliser boost::optional, que je ne connais pas donc je n'en connais pas les inconvénients.

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par r0d Voir le message
    lorsqu'on déclare une variable, on l'initialise (ce qu'on ne peut pas faire en C):
    Pardon ! Si c'est aussi faisable en C (et le code que tu donnes est valide aussi bien en C qu'en C++).

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gl Voir le message
    Pardon ! Si c'est aussi faisable en C (et le code que tu donnes est valide aussi bien en C qu'en C++).
    Oops, au temps pour moi
    Ça fait plus de 10 ans que je n'ai pas fait de C, il me semblait qu'à l'époque on ne pouvait pas faire ça.

Discussions similaires

  1. [XL-2010] Variable qui ne devrait pas être vide
    Par GSFBC dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/05/2014, 14h00
  2. [HTML 5] Test si variable vide ou pas dans code HTML
    Par Ryadus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/05/2010, 14h49
  3. Réponses: 4
    Dernier message: 04/12/2008, 14h01
  4. variable se vide !?
    Par georgeabitbol dans le forum ASP
    Réponses: 10
    Dernier message: 04/06/2004, 09h52

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