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

Langage C++ Discussion :

transformer les printf, scanf et toute la compagnie en flux


Sujet :

Langage C++

  1. #1
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut transformer les printf, scanf et toute la compagnie en flux
    Je crée un programme qui traduirais un programme C en C++, petit problème : les fluxs. En C, les fonctions de type trucf servent à la mêmechose que les fluxs en C++, sauf que voilà, pour la traduction, c'est coton. Est-ce que vous avez une idée d'algorithme qui pourra traduire tous les trucf en flux dans une chaîne de caractères?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Traduire, pas vraiment, mais boost.format propose une approche compatible flux avec un style d'écriture plus proche des libs C.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 218 582
    Points
    218 582
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Sachant que le compilateur C++ peut utiliser les fonction C comme printf(), la conversion n'est pas très utile.
    Mais si cela vous chante, vous pouvez toujours réimplémenter un printf() en C++ (appeler une fonction, par printf et qui renvoie tout dans std::cout).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Expert confirmé
    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
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Sachant que le compilateur C++ peut utiliser les fonction C comme printf(), la conversion n'est pas très utile.
    Mais si cela vous chante, vous pouvez toujours réimplémenter un printf() en C++ (appeler une fonction, par printf et qui renvoie tout dans std::cout).
    Il est possible avec des template variadic d'avoir une fonction type printf qui vérifie le nombre et le type des arguments. La traduction est simple : renommer "printf" en "cppPrintf" (boost fourni probablement ce genre de fonction), et on gagne en sécurité.

    On trouve des implémentations un peu partout : Wikipedia, ou Une présentation d'Andrei Alexandrescu, qui en parle plus en détail.

  5. #5
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    c'est surtout pour améliorer la lisibilité.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    S'il se trouve des formatages de nombres, je ne suis pas sûr que tu gagnes en lisibilité avec les flux.

  7. #7
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    Les flux sont plus lisibles, point final. Qu'est-ce que tu veux dire par "formatage des nombres".
    On peut très bien faire :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << 13 << endl;

  8. #8
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("%.2d\n", n);
    printf("pi = %.5f\n", M_PI);
    Mais il y a le man.

  9. #9
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    Ton code est totalement illisible. On sait même pas ce qu'il fout.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par sosolal Voir le message
    Les flux sont plus lisibles, point final. Qu'est-ce que tu veux dire par "formatage des nombres".
    On peut très bien faire :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << 13 << endl;
    Si on veut imposer le nombre d'emplacements avant et après le séparateur décimal, c'est moins lisible que le printf.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Salut,

    comme il a été dit juste au-dessus "sinon, il y a le man" (man = manuel).
    Si tu trouves ça illisible, c'est les développeurs de la STL C qu'il faut critiquer, c'est eux qui ont choisi cette syntaxe.

    Le `.5` permet d'indiquer que tu veux 5 chiffres après la virgule, ni plus, ni moins.
    D'ailleurs, on peut même indiquer une variable pour spécifier ce nombre de chiffres après la virgule. Je ne me souviens plus la syntaxe exacte, mais c'est parfaitement possible, je l'ai déjà utilisé pour éviter d'afficher les 0 inutiles. Le site cplusplus.com t'aidera à trouver ce que tu veux.

  12. #12
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Citation Envoyé par sosolal Voir le message
    Ton code est totalement illisible. On sait même pas ce qu'il fout.
    Tu voulais savoir le "formatage des nombres", j'ai sortie 2 exemples de la doc. En les simplifiant
    En gros, tu veux remplacer les printf par des flux c++ sans connaître les possibilités de printf...

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Pour un programme de résolutions d'équations du second degré, j'ai utilisé cette option pour ne pas afficher les zéros inutiles des nombres afin d'afficher "proprement" l'équation. Et cette option m'a permis de le faire assez simplement.
    Mais là n'est pas le sujet, tu ne veux pas donner d'exemple de code de ce que tu veux faire ?

  14. #14
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Citation Envoyé par sosolal Voir le message
    En gros, tu veux aider quelqu'un qui veut transformer les printf en fluxs C++ sans savoir que printf, c'est une grosse merde illisible.
    Bof, les flux son tout autant illisible. Ça dépend vraiment du point de vue. Mais avant de faire une transformation de l'un à l'autre, il faut savoir se que fait le premier.

    Citation Envoyé par sosolal Voir le message
    Si on a inventé les flux, c'est pas pour faire joli, hein! C'est pour rendre le code lisible!
    Même pas. C'est pour ne pas utiliser les va_list qui empêche la vérification de type et c'est surtout pour permettre l'affichage de type personnalisés.

    Ce que demande loukiluk n'est pas le code python mais les entrées et sorties.
    Genre printf("%3d", n) -> std::cout << std::setw(3) << n << "\n";

Discussions similaires

  1. transformer les données d'une table .dbf vers ma BD
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 09h54
  2. existe t 'il des programme pour transformer les bases
    Par creazone dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/10/2004, 14h11
  3. Ne pas transformer les <br/> a l'ecriture du fichier X
    Par fidififouille dans le forum XMLRAD
    Réponses: 2
    Dernier message: 07/05/2004, 10h11
  4. Les Bases de Données! tout un monde!!
    Par kikimnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2004, 18h26
  5. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 12h30

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