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 :

pb avec la fonction isspace


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut pb avec la fonction isspace
    bonjour, je veux lire mon fichier d'input. Dans ce fichier, je saute des lignes. Voici une partie du fichier d'input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NBPAR 40 ! numbers of particles
     
    ! initial conditions
    voici mon main

    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
     
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
     
    int str_isspace(const char * s)
    {
    /* return 1 if all the char of the string s are some blanck char, 0 otherwise */
     
      while (isspace (*s++));
      return !*s;
     
    }
     
    int main()
    {
     
      FILE * file=fopen("input.txt","r");
      if(file==NULL)
      {
        printf("erreur\n");
        exit(EXIT_FAILURE);
      }
     
      char line[1000];
     
      while(fgets (line, sizeof line, file) != NULL)
      {
        printf("line = %s  ==> %d\n",line,str_isspace(line));
      }
     
      return(EXIT_SUCCESS);
    }
    et voici ma sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    line = NBPAR 40 ! numbers of particles
      ==> 0
    line = 
      ==> 0
    line = ! initial conditions
      ==> 0
    normalement, la seconde ligne (== la ligne blanche), j'aurais du avoir un 1 non ?
    le man isspace dit :

    vérifie si l'on a un caractère blanc, d'espacement. Dans les
    localisations "C" et "POSIX" il s'agit de: espace, saut de page
    (form-feed, '\f'), saut de ligne (newline, '\n'), retour chariot
    (carriage return, '\r'), tabulation horizontale ('\t'), et tabu-
    lation verticale ('\v').
    savez-vous où se trouve la coquille ?
    Merci

  2. #2
    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
    Salut,

    Il me semble qu'en ajoutant #include <ctype.h> et en modifiant la condition de la boucle while de ta fonction, ça fonctionne.

    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<stdlib.h>
    #include<stdio.h>
    #include<string.h>
     
    #include <ctype.h>
     
    int str_isspace(const char * s)
    {
        /* return 1 if all the char of the string s are some blanck char, 0 otherwise */
     
        while (*s != '\0' && isspace (*s++))
          ;
        return !*s;
     
    }
    Meilleures salutations

    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++

    +

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      while (isspace (*s++));
      return !*s;
    Ici, lorsque tu atteinds le caractere nul, tu incrementes qd meme le pointeur, et donc qd tu testes *s, tu teste pas le dernier caractere, mais celui d'apres

  4. #4
    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 Gruik
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      while (isspace (*s++));
      return !*s;
    Ici, lorsque tu atteinds le caractere nul, tu incrementes qd meme le pointeur, et donc qd tu testes *s, tu teste pas le dernier caractere, mais celui d'apres
    D'où le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (*s != '\0' && isspace (*s++))
          ;
    return !*s;
    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++

    +

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    OK, merci !
    j'ai combiné vos deux codes de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int str_isspace(const char * s)
    {
    /* return 1 if all the char of the string s are some blanck char, 0 otherwise */
     
      while (isspace (*s++));
      *s--;
      return !*s;
     
    }
    Merci !

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par mujigka
    D'où le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (*s != '\0' && isspace (*s++))
          ;
    return !*s;
    Thierry
    Oui mais tu n'expliquais pourquoi son code n'était pas bon

  7. #7
    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 Gruik
    Oui mais tu n'expliquais pourquoi son code n'était pas bon
    C'est vrai! Autant pour moi... Merci pour la précision

    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++

    +

  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 salseropom
    voici mon main

    savez-vous où se trouve la coquille ?
    Une des règles de bon usage du C est de fournir un prototype aux fonctions...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Compiling: main.c
    main.c: In function `str_isspace':
    main.c:10: warning: implicit declaration of function `isspace'
    main.c: At top level:
    main.c:16: warning: function declaration isn't a prototype
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 2 warnings
    Evidemment, ce n'est pas obligatoire (sauf avec les variadics). Alors on peut techniquement ignorer la règle, mais il ne faut pas s'étonner si le programme ne fonctionne pas comme prévu...

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

Discussions similaires

  1. Pb avec fonctions isspace, isalpha, isdigit
    Par fbourgeois dans le forum Code::Blocks
    Réponses: 5
    Dernier message: 24/05/2007, 19h50
  2. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  3. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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