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 :

espaces dans un string ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut espaces dans un string ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct record {
     char name[30];
     char address[30];
     }company;
    Est ce possilble de mettre la ligne suivante dans company.address avec un fscanf?

    7595 Technology Way
    (cette ligne se trouve dans un fichier)

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Oui c'est possible.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Oui c'est possible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(sf, "%s", company.address);
    Je n'ai que le premier mot qui est mis pas les autres...

    comment faire pour tout inclure (meme les espaces)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    On n’a jamais lu des structures avec la fonction fscanf je ne sais pas si c’est possible mais pour moi je travaille sur le turbo c++

    Tu peut lire toute la ligne avec toutes les espaces soi par
    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     int i=0 ;
    	Do{
    	Ch=fgetc(f) ;
    	Sf[i]=ch ;
    i++ ;
    }while(ch !=EOF);
    2-
    Ou bien avec la fonction fgets
    Par exemple :

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(sf, "%29[^\n]", company.address);

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(sf, "%29[^\n]", company.address);
    et pour afficher le resultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(stdout, "%s\n", company.address); // me donne un accent : `

  7. #7
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    salut
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs(company.address,f);//avec f pointeur vers le fichier

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(sf, "%29[^\n]", company.address);
    D'après mes essais (correction du code de virtuadrack), ça ne fonctionne pas...
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    typedef struct
    {
       char name[30];
       char address[30];
    }
    record;
     
    /* -ed-
    record readfile (FILE * sf, record company)
     
    Horrible ! Meme si c'est techniquement possible,
      on ne passe pas une structure en entier. On ne passe que son adresse... ;
     
    void readfile (FILE * sf, record *p_company)
     
    ou
     
    si on gere un code retour...
      */
    int readfile (FILE * sf, record * p_company)
    {
       int err = 0;
       int n;
       n = fscanf (sf, "%s", p_company->name);
     
       err = n != 1;
       if (!err)
       {
          fprintf (stdout, "%s\n", p_company->name); /* ca marche pour cette ligne */
          n = fscanf (sf, "%29[^\n]", p_company->address);
          printf ("n=%d\n", n);
          fprintf (stdout, "%s", p_company->address); /* celle-la non */
    /* -ed-
       fputs (company.address.sf);
    ceci n'a aucun sens. Tu voulais peut etre dire
     
       fputs (company.address,sf);
     
    mais ce n'est pas mieux, car sf est un fichier ouvert en lecture...
     
    Ce que tu veux est :
    */
          fputs (p_company->address, stdout);
       }
       else
       {
          perror ("");
       }
     
    /* -ed- parentheses inutiles...
       return (company);
    */
       return err;
    }
     
    int main (int argc, char *argv[])
    {
    /* -ed- revision de l'algorithme... */
       char fname[30];
       if (argc != 2)
       {
          fprintf (stdout, "please specify a filename : ");
    /* -ed- fonction interdite !
    utiliser fgets() et nettoyer correctement.*/
          gets (fname);
       }
       else
       {
    /* -ed- Eek ! fname n'est jamais initialise... */
    /*
       if ((fp = fopen (fname, "r")) == NULL)
    */
          strcpy (fname, argv[1]);
       }
     
       {
          FILE *fp = fopen (fname, "r");
          if (fp != NULL)
          {
             record company;
             readfile (fp, &company);
     
             fclose (fp);
          }
          else
          {
             perror (fname);
          }
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Microsoft
    n=0
      ╬├┐w↑ "  ╬├┐w↑ "
    Press ENTER to continue.

  9. #9
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    D'après mes essais (correction du code de virtuadrack), ça ne fonctionne pas...
    C'est normal, tu ne sautes pas le caractères '\n' alors tu bloque dessus.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <stdio.h>
     
    typedef struct
    {
       char name[30];
       char address[30];
    }
    record;
     
    int readfile (FILE * sf, record * p_company);
    int create_file(char const *filename);
     
    int main (void)
    {
       char const *fname = "fichier.tmp";
       if (create_file (fname) == 0)
       {
          FILE *fp = fopen (fname, "r");
          if (fp != NULL)
          {
             record company = { 0 };
             readfile (fp, &company);
             fclose (fp);
          }
          else
          {
             perror (fname);
          }
          remove(fname);
       }
       return 0;
    }
     
    int readfile (FILE * sf, record * p_company)
    {
       int err = 0;
     
       if (fscanf (sf, "%29s", p_company->name) !=1)
       { 
          err = 1;
       }
       else
       {
          puts (p_company->name);
          fgetc (sf);
          if (fscanf (sf, "%29[^\n]", p_company->address) != 1)
          {
             err = 2;
          }
          else
          {
             puts (p_company->address);
          }
       }
     
       return err;
    }
     
    int create_file(char const *filename)
    {
       int err = 0;
       FILE *fichier = fopen(filename,"w");
       if(fichier == NULL)
       {
          perror(__func__);
          err = 1;
       }
       else
       {
          fputs("nom_au_hasard\n",fichier);
          fputs("7595 Technology Way\n",fichier);
          fclose(fichier);
       }
       return err;
    }

Discussions similaires

  1. Comment éliminer un espace dans un string ?
    Par khadi8 dans le forum C#
    Réponses: 1
    Dernier message: 11/01/2015, 10h31
  2. Vérification d'espace dans un String
    Par zouuc dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 24/02/2009, 14h56
  3. Les espaces dans une String vers une <TextArea>
    Par loopx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 21/03/2008, 14h37
  4. Mettre des espaces dans une string à intervalles réguliers.
    Par benitoelputoamo dans le forum Général Python
    Réponses: 3
    Dernier message: 15/11/2006, 16h14
  5. [String] supprimer un espace dans un String
    Par Zanton dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 15h33

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