Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

[C++] Exploiter une chaîne de caractère lue au clavier



  1. #1
    Gwyddon

    Unhappy [C++] Exploiter une chaîne de caractère lue au clavier


    ------

    Bonjour à tous,

    Je me heurte à un problème que je n'arrive pas à résoudre. Voici le contexte : j'utilise Root, un logiciel C/C++ bien connu des physiciens HEP. Je voudrais lire un fichier de données et je souhaite laisser le choix du fichier. Donc je demande à l'utilisateur de taper le nom du fichier au clavier, je récupère la chaîne de caractères, et j'aimerais ensuite l'exploiter afin de lire dans le fichier de données correspondants. Et là, plantage

    J'ai tout essayé : avec string *file, string file, char * file etc... Rien à faire.

    J'ai vu que si je fais manger à bidule.open() un const char * il accepte. Le truc c'est que la chaîne n'est pas a priori fixée. J'ai donc pensé à passer par une étape intermédiaire, où je transforme ma string en une *char.

    Cependant, je ne sais pas comment lire la longueur d'une chaîne. J'ai essayé length(machaîne) et Root me renvoie "function length(machaîne) not defined".


    Je vous joins ici mon code, si vous pouviez m'aider ce serait cool

    #include "string.h"

    void Draw() {

    ifstream inStat;
    float x;
    float y;
    float z;
    int imax;
    string fileopen;
    char *intermediate;
    TH1F *stat = new TH1F("stat","Statistics on Slot 12 about Zline_s",100,20,30);
    TH1F *stat2 = new TH1F("stat2","Statistics on Slot 12 about Tshpr",30,0.012,0.015);
    TH1F *stat3 = new TH1F("stat3","Evolution of ",64,1,64);
    TH2F *ztshpr = new TH2F("ztshpr","",30,0.012,0.01 5,100,20,30);
    printf("Quel fichier ouvrir ?\n");
    //scanf(" %c",&fpen); pas bon, code C qui ne marche pas
    cin >> fileopen; // spécifique à C++
    cout << "le fichier est " << fileopen[0] << endl;
    imax= length() fileopen;
    for (int i= 0;i< imax;i++)
    {intermediate[i] = fileopen[i];}
    const char *feopen = intermediate;
    inStat.open(feopen);

    for(int i=1;i<65;i++) {
    inStat >> x;
    inStat >> y;
    inStat >> z;
    stat->Fill(x,1);
    stat2->Fill(y,1);
    stat3->SetBinContent(i,z);
    ztshpr->Fill(y,x);
    }
    ztshpr->Draw();
    inStat.close();
    }

    -----
    A quitté FuturaSciences. Merci de ne PAS me contacter par MP.

  2. Publicité
  3. #2
    Coincoin

    Re : [C++] Exploiter une chaîne de caractère lue au clavier

    Salut,
    Cependant, je ne sais pas comment lire la longueur d'une chaîne. J'ai essayé length(machaîne) et Root me renvoie "function length(machaîne) not defined".
    T'as essayé strlen(machaine) ?
    T'as quoi comme erreur ?
    Encore une victoire de Canard !

  4. #3
    erik

    Re : [C++] Exploiter une chaîne de caractère lue au clavier

    Salut,

    J'ai l'impression que tu déclare ta variable intermediate comme un pointeur de charactère mais que tu ne l'initialise jamais.
    En bon vieux c il faudrait placer un intermediate=malloc(la taille qui va bien) quelque part, en c++ y'a du new a utiliser.

    Alors forcément quand tu fais
    intermediate[i] = fileopen[i] , tu écrit un peu près n'importe ou en mémoire dans un espace que tu n'as pas réservé, résultat plantage

  5. #4
    Gwyddon

    Re : [C++] Exploiter une chaîne de caractère lue au clavier

    J'ai essayé ta suggestion Coincoin, et il change d'erreur pour me dire maintenant

    Error: strlen parameter mismatch param[0] C u Data.C:21:


    Sinon pour erik, ça plante avant même de lire la ligne d'allocation de intermediate, donc ça ne vient pas (pour l'instant en tout cas ) de là.
    A quitté FuturaSciences. Merci de ne PAS me contacter par MP.

  6. A voir en vidéo sur Futura
  7. #5
    Gwyddon

    Re : [C++] Exploiter une chaîne de caractère lue au clavier

    En fait le plantage avec strlen vient du fait qu'il faut utiliser cette fonction exclusivement sur un type *char en C (or j'utilisais un type string de C++).

    J'ai remodifié légèrement le programme, et j'ai tenu compte de la remarque d'erik.

    Il ne plante plus, mais par contre il ne fait pas ce que je veux. Il ne lit pas le fichier..

    Citation Envoyé par Data.C
    #include "string.h"

    void Draw() {

    ifstream inStat;
    float x;
    float y;
    float z;
    char *a=malloc(256);
    TH1F *stat = new TH1F("stat","Statistics on Slot 12 about Zline_s",100,20,30);
    TH1F *stat2 = new TH1F("stat2","Statistics on Slot 12 about Tshpr",30,0.012,0.015);
    TH1F *stat3 = new TH1F("stat3","Evolution of ",64,1,64);
    TH2F *ztshpr = new TH2F("ztshpr","",30,0.012,0.01 5,100,20,30);
    printf("Quel fichier ouvrir ?\n");
    //scanf(" %c",&fpen); pas bon, code C qui ne marche pas
    cin >> a; // spécifique à C++
    const char *feopen = a;
    inStat.open(feopen);
    cout << feopen << endl;
    for(int i=1;i<65;i++) {
    inStat >> x;
    inStat >> y;
    inStat >> z;
    stat->Fill(x,1);
    stat2->Fill(y,1);
    stat3->SetBinContent(i,z);
    ztshpr->Fill(y,x);
    }
    ztshpr->Draw();
    inStat.close();
    }
    Par contre si à la place de const char *feopen= a je mets const char *feopen = "data12.txt" là il lit mon fichier

    No comprendo
    A quitté FuturaSciences. Merci de ne PAS me contacter par MP.

  8. #6
    Gwyddon

    Re : [C++] Exploiter une chaîne de caractère lue au clavier

    Bon maintenant ça marche

    Merci à tous les deux
    A quitté FuturaSciences. Merci de ne PAS me contacter par MP.

  9. Publicité

Discussions similaires

  1. chercher une chaine de caractère dans un texte en Langage C
    Par lui dans le forum Programmation et langages, Algorithmique
    Réponses: 17
    Dernier message: 10/12/2010, 00h01
  2. [Divers] Remplacer une chaine hifi par un auto radio sur une renault 25gtx
    Par tafra dans le forum Dépannage
    Réponses: 0
    Dernier message: 28/10/2007, 16h25
  3. Fonction retournant une chaine de caractère
    Par youril dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/09/2007, 21h28
  4. [Brun] Enregistrer une chaîne sur une télé Waltham...
    Par seewatch dans le forum Dépannage
    Réponses: 0
    Dernier message: 22/08/2007, 14h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.