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 :

création d'une chaine de caractere


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut création d'une chaine de caractere
    Je m'explique
    je veux récupérer la premiere ligne d'un fichier, puis afin de pouvoir la réutiliser, l'insérer dans un char.
    j'ai donc récupérer ma première ligne, et si je fais un printf, je la vois dans ma console.
    Mais je n'arrive pas a l'insérer dans un char que je nomme str_nom.
    N'hésitez pas a me poser des questions si mon message manque de clareté

    En vous remerciant!

    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
    int main (int argc, char** argv){
    	int caractereActuel = 0;
    	char* str_nom[50]; 
            char str_a[1];
    	*str_nom = NULL;
    	FILE* fichier = NULL;	
    	fichier = fopen("koukou.txt", "rt");
    	if ( fichier == NULL)
    		printf("ERREUR");
    	else
    	{
    		do
    		{ 
    			caractereActuel = fgetc(fichier);
                            str_a = printf("%c",caractereActuel);
    			*str_nom = strcat(*str_nom, str_a);
    		}
    		while (caractereActuel != '\n');
    		fclose(fichier);
    	}
    	return 0;
    }

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Bonjour,

    déjà il faut que tu apprennes à présenter ton code proprement (utiliser les indentations...), oublie la parethèse ouvrante style k&r elle est illisbble

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main (void) {
    ....
    }

    préfère lui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main (void)
    {
    ...
    }

    voici ton code présenté correctement

    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
    28
    29
    30
    31
    32
     
    #include <stdio.h>
    #include <string.h>
     
    int main (int argc, char** argv)
    {
       int caractereActuel = 0;
       char* str_nom[50];
       char str_a[1];
       *str_nom = NULL;
       FILE* fichier = NULL;
     
       fichier = fopen ("koukou.txt", "rt");
     
       if (fichier == NULL)
       {
          printf ("ERREUR");
       }
       else
       {
          do
          {
             caractereActuel = fgetc (fichier);
             str_a = printf ("%c",caractereActuel);
             *str_nom = strcat (*str_nom, str_a);
          } while (caractereActuel != '\n');
     
          fclose (fichier);
       }
     
       return 0;
    }
    venons en maintenant aux erreurs

    strcat dont voici le prototype

    char *strcat (char *dest, const char *src);

    La fonction strcat() ajoute la chaîne src à la fin de la chaîne dest en écrasant le caractère `\0' a la fin de dest, puis en ajoutant un nouveau caractère `\0' final. Les chaînes ne doivent pas se chevaucher, et la chaîne dest doit être assez grande pour accueillir le resultat.


    tu passes donc à cette fonction un pointeur sur la chaine destination.

    or le nom d'une chaine est déjà un pointeur donc tu dois déclarer

    et non

    ensuite le 2ème paramètre tu veux ajouter un seul caractère pourquoi cherches tu à utiliser strcat pour ajouter un seul caractère. ta logique est bizzare.

    autant faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int longueur_chaine;
     
    longueur_chaine = strlen (str_nom);
    str_nom[longueur_chaine] = str_a;
    str_nom[longueur_chaine + 1] = '\0';
    ensuite cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_a = printf("%c",caractereActuel);
    printf revoie un entier qui correspond au nombre d'entier effectivement lus, donc dans str_a tu n'as pas le caractère lu mais juste un chiffre.

    bref enormément d'erreurs , dues d'une part à une mauvaise conception et d'aute part à une mauvaise compréhension des pointeurs


    ton code corrigé

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
       int caractereActuel;
       char str_nom[50];
       FILE* fichier = NULL;
       int longueur_chaine;
     
       fichier = fopen ("koukou.txt", "r");
     
       if (fichier == NULL)
       {
          printf("ERREUR");
       }
       else
       {
          str_nom[0] = '\0';
     
          do
          {
             caractereActuel = fgetc(fichier);
     
             longueur_chaine = strlen (str_nom);
             str_nom[longueur_chaine] = caractereActuel;
             str_nom[longueur_chaine + 1] = '\0';
     
          } while (caractereActuel != '\n' && caractereActuel != EOF);
     
          printf ("%s", str_nom);
     
          fclose(fichier);
       }
     
       return 0;
    }
    si y'a quelquechose que tu comprends pas poses des questions

    à savoir qu'il existe une fonction fgets qui lit ligne par ligne dans un fichier.

    PS : le code est largement perfectible, mais bon j'ai essayé de pas trop dévié de ta logique

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Voici ce que me dit mon compilateur:

    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
    main.c: In function «main":
    main.c:5: erreur: «NULL" undeclared (first use in this function)
    main.c:5: erreur: (Each undeclared identifier is reported only once
    main.c:5: erreur: for each function it appears in.)
    main.c:6: erreur: «FILE" undeclared (first use in this function)
    main.c:6: erreur: «fichier" undeclared (first use in this function)
    main.c:7: attention : implicit declaration of function «fopen"
    main.c:9: attention : implicit declaration of function «printf"
    main.c:9: attention : incompatible implicit declaration of built-in function «printf"
    main.c:14: attention : implicit declaration of function «fgetc"
    main.c:15: erreur: incompatible types in assignment
    main.c:16: attention : implicit declaration of function «strcat"
    main.c:16: attention : incompatible implicit declaration of built-in function «strcat"
    main.c:19: attention : implicit declaration of function «fclose"
    main.c: Hors de toute fonction :
    main.c:1: attention : unused parameter «argc"
    main.c:1: attention : unused parameter «argv"
    En vrac:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /* -tc- ne pas oublier d'inclure les fichiers d'en-tête qui vont bien pour
       fournir du code compilable */
    #include <stdio.h>
     
    /* -tc- argc et argv ne sont pas utilises */
    int main (void)
    {
        int caractereActuel = 0;
        /* -tc- veux-tu un tableau de caracteres ou un tableau de pointeurs sur
           char. Je penche pour le tableau de caracteres */
        char str_nom[50];
        /* -tc- A quoi peut bien servir un tableau de 1 element ???
        char str_a[1];
        */
     
        /* -tc- ???
        str_nom = NULL;
        */
        FILE* fichier = NULL;
        int i = 0;
     
        /* -tc- le mode d'ouverture "rt" n'existe pas en C standard. Utiliser "r" */
        fichier = fopen("koukou.txt", "r");
        if ( fichier == NULL)
        {
            printf("ERREUR\n");
        }
        else
        {
            do
            {
                caractereActuel = fgetc(fichier);
                /* -tc- printf() renvoie un entier de type int representant le
                   nombre de caracteres affiches
                str_a = printf("%c",caractereActuel);
                */
                printf("%c", caractereActuel);
                /* -tc- strcat() ne s'utilise pas comme cela. Le 1er argument
                   doit etre de type pointeur sur char
                *str_nom = strcat(*str_nom, str_a);
                */
                str_nom[i] = caractereActuel;
                i++;
            }
            while (i < sizeof str_nom - 1 && caractereActuel != '\n');
            /* -tc- ne pas oublier le caractere de fin de chaine */
            str_nom[i] = '\0';
     
            fclose(fichier), fichier = NULL;
        }
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    MERCIIIIIIIIIII!
    vraiment, des réponses claires, précises et qui m'ont permis de comprendre bcp de choses!

    Derniere question, comment implenter Pi en C?
    j'ai bien essayer 2,3 trucs, mais rien.

    Je vous remercie d'avance!

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par pico07 Voir le message
    MERCIIIIIIIIIII!
    vraiment, des réponses claires, précises et qui m'ont permis de comprendre bcp de choses!

    Derniere question, comment implenter Pi en C?
    j'ai bien essayer 2,3 trucs, mais rien.

    Je vous remercie d'avance!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define PI 3.1415926535897931
    C'est bien ça que tu veux?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Oui c'est bien ca.

    j'ai plutot réfléchi sur math.h!^^

    encore merciiiiiii!!

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et d'ailleurs pour etre prudent je mettrais plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifndef PI
    #define PI 3.14....
    #endif

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 5
    Dernier message: 21/07/2004, 19h34
  3. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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