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 :

[Débutant] Aide utilisation fonctions :(


Sujet :

C++

  1. #1
    Membre régulier

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 76
    Points
    76
    Par défaut [Débutant] Aide utilisation fonctions :(
    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 <iostream>
    #include <stdlib.h>
     
    using namespace std;
     
    char testt(char testtt)
    {
        return testtt;
    }
     
    int main()
    {
      char i = testt('ta');
      system("PAUSE");	
      return 0;
    }
    Hello,

    Voici un code tout bête

    Mon problème :
    Quand je compile et test, il devrais mafficher :
    ta
    Cependant il ne me l'affiche pas, il met juste le PAUSE

    Quelqu'un vois l'erreur ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Re: [Débutant] Aide utilisation fonctions :(
    Citation Envoyé par trakiss
    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 <iostream>
    #include <stdlib.h>
     
    using namespace std;
     
    char testt(char testtt)
    {
        return testtt;
    }
     
    int main()
    {
      char i = testt('ta');
      system("PAUSE");	
      return 0;
    }
    Hello,

    Voici un code tout bête

    Mon problème :
    Quand je compile et test, il devrais mafficher :
    ta
    Cependant il ne me l'affiche pas, il met juste le PAUSE

    Quelqu'un vois l'erreur ?
    Je ne voudrais pas jouer au tête brûlé, mais 'ta' n'est pas un caractère mais bien 2.
    Utilise une chaîne de caractère (*char)

    #include <stdio.h>

    char* testt(char* testtt)
    {
    return testtt;
    }

    int main()
    {
    char* i = testt("ta");
    printf(i); // C'est pas superfflu
    system("PAUSE");
    return 0;
    }

  3. #3
    Membre régulier

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 76
    Points
    76
    Par défaut
    Oké merci

    Comme dit plus haut : level débutant mais bon

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    C'est très mal d'utiliser un char * comme ça.

    Il n'y aucune allocation. Tu envoies des données dans un zone de mémoire non allouée, donc tu peux faire planter ton pc inopinément.
    Essaie de dissocier également la déclaration de i et la fonction qui la remplit.

    De plus on ne peux pas copier un string aussi facilement, tu devrais utiliser strcpy plutôt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(i, testtt("ta");
    Tout ça m'a l'air d'être du c et non du c ++
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Un petit rappel C/C++ :
    -> un caractere est delimité par deux ' (exemple : 'a'). type : char
    -> une chaine de caracteres est delimitée, elle, par deux " (exemple : "abcd"). type : char*
    Birds of a feather flock together

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et en C++ c'est encore mieux :

    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
    #include <iostream> 
    #include <string> 
    #include <limits>
     
    using namespace std; 
     
    string testt(const string& testtt) 
    { 
        return testtt; 
    } 
     
    int main() 
    { 
      cout << testt("salut"); 
      cin.ignore(numeric_limits<int>::max(), '\n'); // pause version standard
     
      return 0; 
    }

  7. #7
    Membre régulier

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 76
    Points
    76
    Par défaut


    Loulou24 j'ai pas compris grand chose a ton truc mais bon je pense qu'avec le tps ca viendra ^^

    Sinon merci pour vos réponses

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le truc important a retenir, c'est que pour manipuler des chaînes de caractères en C++, on utilise la classe standard string, et non les tableaux de char comme en C.

    Ensuite pour la pause, la ligne avec cin.ignore(...) permet d'ignorer tout caractère entré au clavier jusqu'au prochain '\n' (retour à la ligne). Le 1er argument est le nombre de caractères igonrés : comme on veut ici qu'il n'y ait pas de limite on met la valeur maximum que peut valoir un int (c'est ce que donne numeric_limits<int>::max()). Mais ce n'est pas vraiment grave si tu ne comprends pas tout ça, le plus important est que tu saches que la seule version standard (ie. qui marchera partout) de faire une pause est celle-ci .

    Ensuite je suppose que tu as également buté sur le const string& ; c'est un passage de paramètre par référence constante, ça permet d'éviter une recopie entière de ta chaîne de caractère, qui se produirait si tu passais ton argument par valeur.

    J'espère que je ne t'ai pas encore plus embrouillé 8)

  9. #9
    Membre régulier

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 76
    Points
    76
    Par défaut
    Hello,

    Merci pour ces explications ca m'éclaire un peu

    Une derniere question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string testt(const string& testtt)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string testt(const string testtt)
    Qu'est ce que le '&' change en fait ? car j'ai testé ca marche dans les deux cas

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui, le & signifie que tu passes ton paramètre par référence. Si tu ne le mets pas, ce sera un passage par valeur, ce qui signifie que ta chaine sera copiée (et la copie d'un string peut être assez lourde). Si tu as un bouquin ou un cours sous la main, tu peux aller voir à la section des références, tu comprendras mieux

    Un petit exemple vite fait :

    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
    #include <string>
    #include <iostream>
     
    using namespace std;
     
    void Reference(string& s)
    {
       s = "coucou";
    }
     
    void Valeur(string s)
    {
       s = "coucou";
    }
     
    int main()
    {
       string chaine = "hello";
     
       Valeur(chaine);
       cout << chaine << endl; // affiche hello
     
       Reference(chaine);
       cout << chaine << endl; // affiche coucou
     
       return 0;
    }
    Pour ce qui est du const, cela signifie que le paramètre ne pourra pas être modifié. C'est inutile pour un passage par valeur (puisqu'on travaille avec une copie, l'objet original ne sera de toute façon pas modifié), mais à utiliser systèmatiquement lorsque tu passes un paramètre par référence et que tu ne veux pas que celui-ci soit modifié par la fonction.

  11. #11
    Membre régulier

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 76
    Points
    76
    Par défaut
    Oké merci bcp

    Je vais aussi aller jetter un oeil au cours

    ++ et merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Aide utilisation fonction paramètre ensemble[]
    Par Seb2913 dans le forum C#
    Réponses: 2
    Dernier message: 26/11/2014, 23h07
  2. [XL-2003] Aide utilisation fonction ChDir
    Par tritriyaya dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/05/2010, 15h05
  3. [STL] Débutant : problème utilisation fonction Sort
    Par marcootz dans le forum SL & STL
    Réponses: 5
    Dernier message: 29/08/2007, 20h19
  4. aide utilisation fonction MM_jumpMenu
    Par calitom dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2006, 16h53
  5. [Débutant] Déclarer, utiliser une fonction
    Par Hokagge dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2006, 08h03

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