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 de boucle while


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 21
    Points
    21
    Par défaut pb de boucle while
    Salut,
    j'essai de lire char / char dans un fichier
    tant que c'est un blanc je saute,
    le pb, la boucle est infini!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ((caractere_lu=getc(file)) != ' ') {
    			caractere_lu= fgetc(file);
     
    			}

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le code que tu donnes ne fait pas ce que tu décris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ((caractere_lu=fgetc(file)) != ' ') {
    caractere_lu= fgetc(file);
    }
    Le code fait ça :
    SI le caractère 0 est différent de ' ',
    Alors, on met le caractère 1 dans caractère_lu
    SI le caractère 2 est différent de ' ',
    Alors, on met le caractère 3 dans caractère_lu
    ... et ainsi de suite.

    Et au bout d'un moment, tu tombe sur le fin de fichier, fgetc renvoie donc EOF... est c'est la boucle infinie.

    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int c;
    c = fgetc(file);
    while(c != EOF) {
       if(c == ' ') {
          /* on traite le cas espace */
       } else {
          /* on traite les autres cas */
       }
       c = fgetc(file);    
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Merci, je commence à comprendre;;;;
    cela dit, j'ai besoin de lire un couple de caractere à la fois (on evitant les espaces)
    si je fais comme tu dis, chaque caractere est considéré séparement, non???

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par karimDevelopper Voir le message
    si je fais comme tu dis, chaque caractere est considéré séparement, non???
    Oui, tout à fait.

    Mais tu peux aussi décider de lire un caractère dans la boucle while :

    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
    int c;
    c = fgetc(file);
    while(c != EOF) {
       if(c == ' ') {
          /* on lit le reste du couple */
          int c2 = fgetc(file);
     
          /* mais on vérifie quand même que la fin 
             de fichier n'a pas été atteinte :*/
          if(EOF == c2) {
            break;
          } else {
              /* faire des choses avec c2 */
          }  
       }
       c = fgetc(file);    
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Bien, Merci
    J'ai une question compélementaire,
    je cherche à faire " if (c !~ [^ATCG]) ... "
    en d'autres termes, matcher le caractere lu avec une exp reg (autre que A,T,C ou G),,,
    est il possible en C
    merci

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Il y a plusieurs méthodes pour faire ça en C, j'en voit au moins deux :

    switch / case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch(c) {
      case 'A':
      case 'T':
      case 'G':
      case 'C':
        /* faire des choses */
        break;
    default:
        /* faire d'autres choses */
    }
    Les regex, puissant, mais plus difficile d'accès.
    http://nicolasj.developpez.com/articles/regex/

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    merci et treees bien tot,,,,je reviens au C après plusieurs années...

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

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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