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 :

On remplace le printf par une autre fonction


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudiante
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 0
    Points
    0
    Par défaut On remplace le printf par une autre fonction
    bonjour
    je veux modifier le printf et scanf dans ce code au dessu par un une fonction instancie d'un autre classe pour offrir les donnés au lieu de scanf est ce qu'il est possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    creer(&pub, &priv);
     
    	message[LO] = D_message[LO] = '\0'; /* terminaison des tableaux vus comme chaines */
    	printf("Entrer un message, sous forme d'une chaine d'au plus %d caracteres.\n", LO);
    	printf("pas de caracteres accentues, cedilles, etc.)\n");
    	for (i = 0; i < LO; i++)
    		if ((message[i] = getchar()) == '\n')
    			break;
    	while (i < LO)
    		message[i++] = ' ';
    mon essai est:
    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
     
    #include "Vehicule.h"
    char message[LO+1], D_message[LO+1]; 
    creer(&pub, &priv);
    	message[LO] = D_message[LO] = '\0'; /* terminaison des tableaux vus comme chaines */
    	Vehicule veh;
           LO =veh .Getmsgwrg();
    	printf("pas de caracteres accentues, cedilles, etc.)\n");
    	for (i = 0; i < LO; i++)
    		if ((message[i] = getchar()) == '\n')
    			break;
    	while (i < LO)
    		message[i++] = ' ';
    	printf("Le message pris en compte est : \"%s\"\n", message);
     
    	chaine_to_nb(message, M);
    ET MERCI

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,

    Déjà, l'équivalent à printf (qui est la sortie standard de C) est sans conteste std::cout.

    L'équivalent de scanf (qui est l'entrée standard de C) est, quant à lui, sans conteste std::cin.

    Par contre, si tu veux quelque chose d'efficace, tu devrais envisager de virer très rapidement l'utilisation de char * pour la représentation de chaines de caractères.

    La classe "idéale" pour représenter les chaines de caractères (étant donné qu'elle a été créée dans ce but) est std::string.

    D'autre part, au lieu de boucler sur un getc(), tu pourras utiliser la fonction std::getline(<flux d'entree>, <chaine de destination> )En combinant les deux, tu n'auras plus besoin de t'inquiéter du nombre de caractères que l'utilisateur pourra introduire, à moins que tu ne veuilles placer une limite totalement arbitraire.

    ta fonction pourrait donc parfaitement ressembler à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* requières un #include <string> et un #include <iostream> pour fonctionner */
    std::string message("");
    /* si vraiment tu veux maximum XX caractères : */
    while(message.empty() // pour etre sur de passer au moins une fois dans la boucle 
          &&message.size()<= XX){ 
        std::cout<<"veuillez introduire une chaine de caracteres : "<<std::endl;
        std::getline(cin, message);
        if(message.size()> XX){
            std::cout<<" vous avez introduit "<<message.size()<<" caracteres."<<std::endl
                     <<"veuillez vous limiter a "<<XX<<std::endl;
        }
    }
    /* ... */
    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

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudiante
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 0
    Points
    0
    Par défaut
    je veux modifier l'entré cad je veux eliminer printf ou cout
    je veux initialiser le message par instanciation dune fonction et quand j'affecte une paraetre alors le retour de focntion se emt dans la parmaetre d etype char comme je l'ecrit mais je ne peux pas connaitre est ce correcte ou ilya une chose à modifier:
    donc je remplace ce ligne :
    printf("Entrer un message, sous forme d'une chaine d'au plus %d caracteres.\n", LO);
    par ce ligne
    Vehicule veh;
    LO =veh .Getmsgwrg();

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Ben, à ce moment là, tu crées simplement une fonction membre dans laquelle tu mets le code qui t'intéresse.

    Si ce n'est qu'il est rarement intéressant d'utiliser printf (ou scanf, ou cout ou cin) dans une fonction membre : cela va limiter énormément les options dont tu disposes pour faire évoluer ton application par la suite (par exemple: le fait de donner une IHM à ton application).

    L'idéal, c'est donc de prévoir un constructeur qui prendra "les paramètres qui vont bien" pour ta classe véhicule.

    En effet, l'une des idées de base du paradigme OO est que tout objet doit être utilisable dés le moment où il est construit.

    Mettons, par exemple, que tu veuilles une classe Voiture qui permette de représenter:
    • la marque (sous la forme d'une chaine de caractères)
    • le modèle (sous la forme d'une chaine de caractères)
    • la cylindrée (sous la forme d'un entier)
    • le carburant utilisé (sous la forme d'une énumération, que je donnerai dans le code)
    Il faut que, dés le moment où tu crées une voiture,ces informations soient correctes, car une renault ne pourra jamais devenir une audi, une twingo ne pourra jamais devenir une kangoo, la cylindrée de 1300cc ne pourra jamais passer à 1500 et tu ne pourras jamais décider de mettre du diesel dans une voiture essence

    Ta classe voiture ressemblerait donc sans doute à quelque chose comme
    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
    /* la fameuse énumération pour les carburants */
    enum Carburant{
        essence,
        diesel,
        lpg,
    };
    class Voiture{
        public:
            Voiture(std::string const & marque, std::string const & modele, int cylindree, Carburant carburant):
                    marque_(marque),modele_(modele),
                    cylindree_(cylindree), carburant_ (carburant){}
             std::string const & marque() const{return marque_;}
             std::string const & modele() const{return modele_;}
             int cylindree() const{return cylindree_;}
             Carburant carburant() const{return carburant_;}
        private:
            std::string marque_;
            std::string modele_;
            int cylindree_;
            Carburant carburant_;
    };
    Une fois que tu as cela, l'origine des différentes valeurs n'a plus aucune espèce d'importance: du moment que tu as deux chaines de caractères, un entier et une valeur énumérée pour le carburant, tu peux créer un objet de type Voiture et l'utiliser "comme bon te semble".

    Cela peut se faire sous en prenant des valeurs arbitraires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Voiturefoo(){
        Voiture laMienne("audi","A6",1800,diesel);
        /* on peut l'utiliser ici */
        /* ou la renvoyer à la fonction appelante */
        return laMienne;
    }
    cela peut se faire en lisant un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Voiture bar(std::string filename){
        std::ifstream ifs(filename.c_str());
        std::string marque;
        std::string modele;
        int cylindree;
        Carburant carburant;
        ifs>>marque>>modele>>cylindree>>carburant;
        Voiture celleDuVoisin(marque, modele, cylindree, carburant);
        /* on peut l'utiliser ici */
        /* ou la renvoyer */
        return celleDuVoisin;
    }
    Cela peut se faire en utilisant les entrées et sorties standards:
    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
    Voiture creeVoitureEntreeStandard(){
        std::string marque;
        std::string modele;
        int cylindree;
        Carburant carburant;
        std::string strcarburant; // l'utilisateur introduira plutot "essence", "diesel" ou "lpg" ;)
        std::cout<<"veuillez introduire la marque :";
        std::cin >> marque;
        std::cout<<"Veuillez introduire le modele :";
        std::cin >> modele;
        std::cout<<"Veuillez introduire la cylindree :";
        std::cin>> cylindree;
        std::cout<<"Veuillez introduire le carburant :";
        std::cin>> strcarburant;
        /* une petite astuce pour accepter aussi bien ESSENCE que Essence ou essence */
        std::transform(strcarburant.begin(),strcarburant.end(), std::toupper());
        if(strcarburant == "ESSENCE"){
            carburant  = essence;
       }else if(strcarburant =="DIESEL"){
            carburant  = diesel;
       }else if(strcarburant =="LPG"){
            carburant  = lpg;
       }else {
           std::cout<<"oopps, ce carburant m'est inconnu"<<std::endl;
           throw badCarburantName(); // à implémenter par ailleurs ;)
       }
       return Voiture(marque, modele, cylindre, carburant);
    }
    Et tu pourrais meme utiliser les champs d'une IHM (Qt inside ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Voiture MonFormulaire::creeVoiture(){
        std::string marque = marqueEdit->text().toStdString();
        std::string modele = modeleEdit->text().toStdString();
        int cylindree        = cylindreeEdit->text().toInt();
        Carburant carburant(carburantCombo->selectedIndex());
        return Voiture(marque, modele, cylindree, carburant);
    }
    Si je n'ai pas encore répondu à ta question, c'est qu'il faudra essayer d'expliquer un peu plus clairement ce que tu souhaites faire
    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

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudiante
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 0
    Points
    0
    Par défaut
    merci beaucoup à votre reponse qui est tres claire
    mais malheuresement ,mon code se ne pas comme ça.j'ai fais une application dans le reseau ad hoc vehiculaire. j'ai fais une application d'encouragement des vehicules à la cooperation dans vanet.chaque vehicule envois un message au l'autre vehicule:et lorsque un vehicule fais un accident ,la voiture voisin envoie un message d'alarme au tous les vehciules pour faire attention et afin d'assurer la securité routiers et les passagers. mais ilya des voitures font de malcomportement qui va tromper les autres voitures par des messages falsifié .alors qui va affaibli les reseaux et va engendre des probleme de confidentialité.
    alors ,pour sortir de ce truc , nous proposons de chiffrer les message envoyé pour eliminer le falsification et les messages erroné.
    mais j'ai trouve de conflit d'implementer le code rsa de crypatge car il est toujours demande l'intrusion de utilisateurs.et ça va affaiblir les capacites de cette application .c'est pour cela j'essai d'eliminer le pritf ou cout ou cin
    mon application se fais avec le logiciel ns3 et sous le palatteforme ubuntu 12.04 : pour programmer l'application ,j'utilise la langage c++

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par chirazch Voir le message
    merci beaucoup à votre reponse qui est tres claire
    mais malheuresement ,mon code se ne pas comme ça.j'ai fais une application dans le reseau ad hoc vehiculaire. j'ai fais une application d'encouragement des vehicules à la cooperation dans vanet.chaque vehicule envois un message au l'autre vehicule:et lorsque un vehicule fais un accident ,la voiture voisin envoie un message d'alarme au tous les vehciules pour faire attention et afin d'assurer la securité routiers et les passagers. mais ilya des voitures font de malcomportement qui va tromper les autres voitures par des messages falsifié .alors qui va affaibli les reseaux et va engendre des probleme de confidentialité.
    alors ,pour sortir de ce truc , nous proposons de chiffrer les message envoyé pour eliminer le falsification et les messages erroné.
    mais j'ai trouve de conflit d'implementer le code rsa de crypatge car il est toujours demande l'intrusion de utilisateurs.et ça va affaiblir les capacites de cette application .c'est pour cela j'essai d'eliminer le pritf ou cout ou cin
    mon application se fais avec le logiciel ns3 et sous le palatteforme ubuntu 12.04 : pour programmer l'application ,j'utilise la langage c++
    Bon, en relisant ton intervention précédente, j'ai l'impression que tu voudrais que la fonction membre Getmsgwrg (que j'aurais plutot nommé getWarningMessage, car au moins elle permet de mieux savoir ce qu'elle fait ) renvoie un message prédéfini.

    Dans ce cas, que penses tu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::sting const MaClass::Getmsgwrg() const{
        return "attention, ceci est un avertissement donne";
    }
    Pour le reste, excuses moi, mais j'ai vraiment du mal à suivre tes explications car tu pars littéralement "dans tous les sens":

    Tu commence par parler de supprimer printf, je te donnes la solution.

    Mais maintenant, tu rajoutes la notion d'un réseau et de véhicule dont on ignore tout, d'un cryptage RSA et de ubuntu qui n'ont strictement rien à voir.

    Si je peux me permettre un conseil, c'est de lire et d'essayer d'appliquer ma signature : ce qui se conçoit bien s'énonce clairement et les mots pour le dire vous viennent aisément

    Une fois que tu auras les idées claires sur ce que tu veux et ce que tu as déjà, tu pourras peut etre nous expliquer clairement ce qu'il te manque pour que nous puissions te venir en aide de manière efficace
    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

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudiante
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 0
    Points
    0
    Par défaut
    merci ,ui on elimine le parti reseau et ubuntu mais je les parles justement pour vous bien comprendre mon application

    mais chez moi :get msgwrg c'est une fonction dans la classe vehicule
    mais si tu conseille de faire getmsgwrg est une classe je le ferais

Discussions similaires

  1. shell_exec: Remplacer un dossier par une autre
    Par Gon3s dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/04/2012, 14h12
  2. Variable dans une fonction appelée par une autre fonction
    Par CyrilD dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2010, 14h42
  3. remplacer un jpanel par une autre au cours d'execution du programme
    Par switch1 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 10/02/2009, 14h31
  4. Stopper une fonction par une autre fonction
    Par Clairette29 dans le forum MATLAB
    Réponses: 11
    Dernier message: 02/07/2008, 11h05
  5. Réponses: 2
    Dernier message: 22/10/2007, 18h50

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