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 :

Problème affichage sous-chaîne extrait d'une chaîne


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Par défaut Problème affichage sous-chaîne extrait d'une chaîne
    Bonjour,
    Je suis débutant en programmation C. Je souhaite faire un programme qui conjugue un verbe du 1er groupe.
    Pour cela j'extraire le radical du verbe en enlevant la terminaison (er) du verbe auquel j'ajoute les terminaisons (e, es etc..).
    Mais j'ai problème lorsque je fais la concaténation entre le radical et les terminaison (e, es, e, ons, ez, ent), il y a des caractères (un peu du charabia) supplémentaire entre le radical et la terminaison.

    Voici le code que j'ai fais. (c'est la finesse)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void main()
    {
    printf("Donner un verbe du 1er groupe:");
    gets(verbe);
     
     n = strlen(verbe);
     n=n-2;
     strncpy(racine, verbe, n);
     racine[n]="\0";
     
    puts(racine);
    }
    Comment faire pour avoir un résultat correct à l'affichage?
    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Si ton compilateur est bien réglé, il est censé t'afficher des warnings. Les warnings sont importants, il faut bien les lire.

    1) Tu confonds les guillemets et les apostrophes. Ces deux caractères n'ont pas la même signification.

    2) La fonction gets est dangereuse. Utilise fgets à la place.

    3) La fonction main retourne toujours un entier.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Par défaut
    Euh je crois qu'il manque pas mal de ligne de code... car il n'y a aucune creation de variable...
    Et je ne vois pas la concaténation entre le radical et les terminaisons...

    Pour moi, ton code meme si la ne compile pas (a cause des erreur que a relever jeroman) il va afficher uniquement ton radical du verbe soit pour le verbe :
    "Montrer"
    tu vas afficher uniquement :
    "Montr"

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Par défaut
    Oui il y a des warning. Peux-tu m'expliquer l'utilisation de la fonction fgets?
    J'ai fais des recherches sur le net mais je n'arrive pas à bien appréhender tout le contour de son utlisation.

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Par défaut
    J'ai pas mis le code en entier. voici tous le code

    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
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    #define verb 20
     
    void main(void)
     
    {
      char verbe[verb];
       char * racine;
       int n;
     
        printf("Donner un verbe du 1er groupe:");
        gets(verbe);
     
         n = strlen(verbe);
         n=n-2;
         strncpy(racine, verbe, n);
         racine[n]="\0";
     
         puts(racine);
         getch();
     
    }

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *fgets(char * s, int n, FILE * fichier);
    s : adresse du début d'un tableau de char destiné à stocker la chaine lue
    n : la taille de ce tableau
    fichier: Le fichier lu. Si c'est la console, utiliser stdin pour fichier.

    Fonctionnement :
    Lit une ligne sur fichier en se limitant aux n-1 premiers caractères ou jusqu'à trouver un '\n'. Termine la chaine par un '\0' dans s.
    Au contraire de gets(), fgets() place le '\n' (si il en a trouvé un) dans le tableau.

    Retourne NULL en cas de fin de fichier et si rien n'a été lu. Retourne s dans le cas contraire.

    Donc, si le tableau est trop petit pour contenir la ligne (y compris le '\n' et un zéro terminal), la ligne n'est que partiellement lue (uniquement les n-1 premiers caractères) et le tableau ne contient pas alors de '\n'

    Si la présence du '\n' dans s est génante, l'enlever :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if (fgets(s,......)!= NULL)
     {
       char * p = strchr(s,'\n');
       if(p != NULL) *p = '\0';  // ligne entièrement lue, enleve le '\n'
     .....

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Par défaut
    Je ne comprend pas la fonction getch() par contre...

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

Discussions similaires

  1. Recherche d'une sous-chaîne complète dans une chaîne de caractères
    Par missmiss89 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 06/07/2011, 16h26
  2. convertir une chaîne unicode en une chaîne ascii
    Par kawther dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/09/2009, 15h50
  3. récupérer une sous-chaîne à partie d'une chaîne
    Par aroua dans le forum Général Java
    Réponses: 8
    Dernier message: 18/04/2008, 15h36
  4. Réponses: 2
    Dernier message: 10/09/2007, 19h03
  5. Réponses: 2
    Dernier message: 16/06/2006, 09h15

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