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 :

rajouter un "s" si nécessaire


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 19
    Par défaut rajouter un "s" si nécessaire
    Bonjour

    Je suis tout débutant en C++!
    J'aimerais ajouter un s si c'est nécessaire au contenu d'un message cout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout<<"vous aves encore 5 jour"<<pluriel<<"de congé"<<endl
    En pseudo code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Si (monconge > 1) alors pluriel = s
    sinon pluriel = ""
    fin
    Je déclare

    char pluriel

    si j'y place un s: pluriel=='s'
    cela fonctionne mais pas si j'y place rien: pluriel==''

    PS: en VB que je connais mieux: pas de problème

    Merci d'avance aux programmeurs confirmés

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonjour,

    Attention, et c'est totalement différent, relis ton cours sur le C++.


    Ensuite, ne peut pas être correct, car une absence de caractère n'est pas un caractère ! En fait, un char c'est un nombre situé entre -128 et 127 (ou 0 et 255 si unsigned). La table ASCII défini la correspondance entre le nombre et le caractère voulu. Il n'y a aucun caractère « rien du tout » dans cette table.
    Il faut au moins que tu y places une espace, mais ce n'est pas non plus ce que tu veux.
    Si tu veux appliquer ton pseudo-code, il faut que tu utilises une std::string et non un char.

    Autrement, la solution la plus correcte est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cout << "vous aves encore " << monconge << " jour";
    if(monconge > 1)
        cout << 's';
    cout << " de congé." << endl;
    ou, si tu voues une adoration aux instructions sur une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout << "vous aves encore " << monconge << " jour" << (monconge > 1 ? "s" : "") << " de congé." << endl;
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 19
    Par défaut
    Merci florian

    Je vais utiliser ta solution .
    Mais je pensasis qu'en C++ on pouvait assigner simplement une valeur "vide" à une variable comme en VB.

  4. #4
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Le C++, dérivant du C, est un langage de plutôt bas niveau d'abstraction. En tout cas, quand tu utilises un char, tu travailles très bas niveau, c'est-à-dire proche de la réalité, à savoir la table ASCII, qui est la réalité de tout caractère en informatique (sans parler des encodages plus riches tels que l'unicode, bien sûr).
    Quand tu utilises std::string, tu travailles davantage haut niveau.

    Je ne connais pas VB, mais je suppose que c'est un langage de haut niveau d'abstraction. Par conséquent, tu es toujours un minimum détaché de la réalité. Tu te soucies beaucoup moins des détails, au détriment des performances.

    C'est ce qui fait qu'on peut trouver le C++ plus compliqué.
    Dès que tu travailles avec les types de base (int, char, etc., en outre la partie C du C++), tu es en bas niveau. Lorsque tu utilises des abstractions telles que std::string (pour rester dans le domaine des caractères et du texte), tu travailles en haut niveau.
    Une fois que tu as compris ça, le C++ paraît plus simple.

    Un petit ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Au passage (rien à voir avec le C++) quitte à mettre le pluriel, autant enlever la faute sur "avez" qui s'est glissé dans la phrase.

    Et puis pour le test du pluriel, je crois qu'en français le pluriel commence à 2, donc ça change rien pour des entiers mais par pour des flottants. Bon c'est complètement du détail et en plus je peux pas vérifier.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Dans le même genre de remarque, j'ai fini par faire selon le besoin /demande client une des deux solutions suivantes:
    Solution 1 (chaîne générique):
    "vous avez XX jour(s) de congés".
    Solution 2 (2 chaines différentes):
    "vous avez 1 jour de congés".
    "vous avez XX jours de congés".

    L'avantage, c'est qu'en cas de traduction le pluriel n'est pas en dur dans le code!

  7. #7
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Une variante qui corresponds au pseudocode proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string pluriel; // vide
    if(monconge > 1)
         pluriel = "s";
     
    cout<<"vous aves encore 5 jour"<<pluriel<<"de congé"<<endl;

    Niveau mémoire ça se passe pas de la même façon, mais au moins ca a le mérite d'être particulièrement explicite.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    L'opérateur ternaire est - même s'il faut veiller à ne pas l'utiliser à tord et à travers - particulièrement adapté à ton problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
        int monConge;
        std::cout<<"il vous reste "
                 <<monConge
                 <<monConge<1? "jours":"jour"
                 <<" de conge a prendre";
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Jea,
    Citation Envoyé par 3DArchi Voir le message
    Dans le même genre de remarque, j'ai fini par faire selon le besoin /demande client une des deux solutions suivantes:
    Solution 1 (chaîne générique):
    "vous avez XX jour(s) de congés".
    Solution 2 (2 chaines différentes):
    "vous avez 1 jour de congés".
    "vous avez XX jours de congés".


    L'avantage, c'est qu'en cas de traduction le pluriel n'est pas en dur dans le code!
    +1, c'est la solution que j'ai choisie, pour la simplification des problèmes de traduction, toujours difficiles (marques du pluriel différentes selon les langues).

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sauf que là, il est quand même plus lisible avec des parenthèses.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main()
    {
        int monConge;
        std::cout << "il vous reste "
         << monConge
         << (monConge>1? "jours":"jour")
         << " de conge a prendre"
         << endl;
        return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Pour être toujours plus précis, on dit « des jours de congé ». « Congé » s'écrit au singulier et est invariable dans ce cas précis ...

  12. #12
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 19
    Par défaut
    Merci pour les solutions qui sont toutes plus intéressantes les unes que les autres.
    Merci aussi aux intervenants soulevant les fautes de frappe

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