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 :

printf et scanf


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut printf et scanf
    Salut les copains!

    Je suis en train de lire pas mal de tutoriels sur le C++ et j'essaie de créer de petites applications simples pour vérifier que j'ai bien tout compris.
    Apparemment j'ai pas tout compris... ^^

    J'ai voulu écrire un programme qui demande à l'utilisateur d'écrire quelque chose, qui lise ce que l'utilisateur a écrit, et puis qui dise "vous avez écrit XXX".

    Voici mon code en l'état actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <iostream> // c'était là quand j'ai créé le projet, j'ai pas touché
    #include<stdio.h>
     
    using namespace std; // c'était là quand j'ai créé le projet, j'ai pas touché
     
    int main() // c'était là quand j'ai créé le projet, j'ai pas touché
    {
        char a[100]; // je définis une chaîne de 100 caractères sans l'initialiser
     
        printf("Ecrivez quelque chose s'il-vous-plait...\n"); // consigne à l'utilisateur
        scanf("%[100]s", a); // lecture de la réponse de l'utilisateur
        printf("Vous avec ecrit : %a[100]"); // répéter la réponse de l'utilisateur
    }
    La compilation ne renvoie pas d'erreur, mais l'avertissement suivant, que je ne sais pas encore interpréter:

    Warning: unknown conversion type character 'a' in format

    À l'exécution, le programme produit le résultat suivant:
    Ecrivez quelque chose s'il-vous-plait...
    a (ça c'est ce que j'ai écrit)
    Vous avec ecrit : -0x1.9bf0b0p+808[100]
    Process returned 0 <0x0> execution time : 2.794 s
    Press any key to continue.

    Voilà. D'après mes connaissances actuelles, j'aurais tendance à dire que le "a" que j'ai écrit a été mal interprété (disons interprété "dans une autre langue"), ou qu'il n'a pas été renvoyé comme je m'y attendais. Le contenu renvoyé a un peu l'air d'une adresse, ou d'un truc du genre...

    Merci de m'expliquer ce qui n'allait pas.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    si tu es en C++ oublie immédiatement les scanf et printf qui sont du C et passe à du std::cout et std::cin.

    Sinon, les crochets dans le formatage, tu as vu ça où ? Jamais entendu parler pour ma part. Pour limiter à 100 caractères, on fera %100s
    Et printf ne s'utilise pas comme ça pour formater une variable.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ok... ^^
    Je reviens après avoir recommencé en vrai C++ =D

  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
    Hello,

    Utilise aussi des string au lieu de ton tableau de char (la aussi, c'est la façon de faire en C, pas en C++)

    doc ici

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Salut, merci!
    Les strings j'ai un peu essayé, mais ça marchait pas trop. Bon, en même temps c'est peut-être les printf scanf qui faisaient merder mon programme...

    Je reviens si j'ai de nouveaux problèmes =D

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ah ben ça aura pas été long! ^^

    Je voudrais écrire un truc du genre:

    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
     
    // déclaration
    string reponse;
     
    if (reponse=="oui") // ici j'ai une erreur
    {
    blablabla
    }
    else if (reponse=="non") // ici j'ai une erreur
    {
    blablabla
    }
    else
    {
    blablabla
    }
    Au niveau des erreurs, on me signale que la norme ISO C++ interdit la comparaison entre un pointeur et un entier. Je ne vois pas trop le rapport avec ce que j'ai écrit.
    Quelqu'un sait-il pourquoi j'ai ce genre de problème?

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Sinon, les crochets dans le formatage, tu as vu ça où ? Jamais entendu parler pour ma part.
    Printf et scanf acceptent des expression régulière il me semble :
    "%10[abc]" = 10 caractères a, b ou c
    "%[^\n]" = lire jusqu'au premier retour à la ligne.

    @Armulis :
    Essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <string>
     
    std::string reponse;
     
    if(reponse == "non");

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Merci Neckara, mais "#include <string>" et "using namespace std;" sont déjà au début de mon programme.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    C'est tout bon j'ai trouvé!

    Maintenant je cherche comment faire une petite temporisation (pour que le programme ne balance pas toujours tout ce qu'il a à dire en un instant sur la console.

  10. #10
    Membre habitué
    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
    Points : 144
    Points
    144
    Par défaut
    #include <unistd.h>
    sleep(10);

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Printf et scanf acceptent des expression régulière il me semble :
    "%10[abc]" = 10 caractères a, b ou c
    "%[^\n]" = lire jusqu'au premier retour à la ligne.
    Ca a effectivement l'air d'être le cas pour le scanf, mais pas pour le printf.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Merci Kripteks.
    Je demande juste un truc, puisque j'ai été averti à ce propos: sleep ne risque pas de surcharger mon processeur, si?
    Et la valeur à introduire correspond-elle à des millisecondes?

  13. #13
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    sleep venant de unistd.h fait une attente passive du nombre de secondes donné.
    (En C++11 on peut utiliser la solution (standard) de #include <chrono> avec std::this_thread::sleep_for(std::chrono::seconds(s)); ou std::this_thread::sleep_for(std::chrono::milliseconds(ms)); par exemple.)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ok, ok... ^^
    Y'a ce qu'il me fallait, mais j'avoue ne pas avoir tout compris sur la fin =D
    Je vais sûrement y venir en progressant, alors je garde ça au chaud, merci!

  15. #15
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Il y a pas grand chose à comprendre
    Il s'agit juste d'un appel de fonction sleep_for qui prend en paramètre une durée std::chrono::seconds(le_nombre_de_secondes_que_tu_veux_attendre).
    (Il faut activer C++11 pour pouvoir l'utiliser.)

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Mmh... sleep ne fonctionne pas, apparemment.
    J'ai mal compris?

    Voici ce que j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
    #include <unistd.h>
     
    using namespace std;
     
    int main()
    {
        cout << "Salut!" << endl;
        sleep(3);
        cout << "Ca va bien?" << endl;
        return 0;
    }
    L'erreur renvoyée est: "sleep was not declared in this scope". Je ne comprends pas...

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si tu es sous windows, il faut utiliser Sleep de windows.h

    Sous Unix il s'agira de usleep de unistd.h
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  18. #18
    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 Bousk Voir le message
    Sous Unix il s'agira de usleep de unistd.h
    sleep existe aussi.

    Mais de toute façon pour quelqu'un qui commence le C++, autant prendre de bonnes habitudes et utiliser des fonctions standards (et portable) là où c'est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // g++ -std=c++0x main.cpp -o main
    #include <thread>
    #include <chrono>
     
    int main() {
       std::this_thread::sleep_for(std::chrono::seconds(3)); // sleep 3 sec
       return 0;
    }
    C'est pas plus dur à utiliser, et ça marche partout.

  19. #19
    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
    Pas sous Visual C++ 2010, malheureusement... :/

  20. #20
    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
    Ni sous gcc 4.6, mais par "partout" j'entendais "tout compilo qui à des notions de c++11", comme tu t'en doutais je pense.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2010, 10h41
  2. printf et scanf en Assembleur
    Par Master C dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2008, 20h36
  3. Les spécificateurs de format de printf et scanf
    Par Mokette dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 11/01/2008, 15h58
  4. redéfinition de printf() et scanf()
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 06/09/2005, 17h18

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