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 :

test de fin de ligne


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 160
    Points : 49
    Points
    49
    Par défaut test de fin de ligne
    Bonjour,
    je lis un fichier texte caractere par caractere.
    Comment je fais pour tester que j arrive deja à la fin d'un ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(c!=' '||c!='\n'){ is.read (&c,sizeof(char)); cout <<c;}
    je veux que la boucle s arrete quand j arrive à la fin de ligne (ou espace)

    Merci pour votre aide.

    ps: ce code ne fonctionne pas

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu as la fonction get qui conviendra beaucoup mieux à ton utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(c!=' '||c!='\n'){ is.get (c); cout <<c;}
    D'autre part tu peux avoir deux problème avec le code que tu nous présente : si 'c' est mal initialisé(c'est à dire s'il vaut ' ' ou '\n') ou si is atteint la fin du fichier sans avoir rencontré un espace ou un retour à la ligne ton programme risque d'avoir un serieux problème

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 160
    Points : 49
    Points
    49
    Par défaut
    ok, mais le probleme est que meme avec mon code est que l'instruction c=="\n" ne fonctionne pas!! y t il un autre moyen pour tester le retour chariot??
    Merci

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonjour,

    Ta condition de sortie n'est pas bonne.
    Si j'ai bien compris, tu veux sortir de la boucle lorsque le caractère lu est un espace OU est une fin de ligne.
    Autrement dit, tu veux rester dans la boucle tant que le caractère lu n'est pas un espace ET n'est pas une fin de ligne.
    Se demander à la fois quelle est la condition pour rester/rentrer dans une boucle et quelle est la condition pour en sortir, puis vérifier qu'elles coïncident peut permettre d'éviter pas mal d'erreurs de ce type.

    Sinon, je ne sais pas exactement ce que tu veux faire avec tes caractères, mais la lecture d'un std::string avec l'opérateur « >> » s'arrête au premier caractère « blanc » (white space) rencontré.
    Par contre, je ne suis pas sûr du comportement lorsque le premier caractère lu est blanc.
    À voir, ainsi que « std::skipws() » et « std::ws() ».

    Autrement, il y a toujours la bonne vieille fonction C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <cctype>
     
    int std::isspace(int);
    J'ajouterais aux mises en garde de Joe Dralliam, au cas où tu ne serais pas au courant, que la marque de fin de ligne varie selon le système d'exploitation.
    C'est une combinaison des caractères « '\n' » (newline / line feed) et « '\r' » (carriage return) :
    • Windows : "\r\n" ;
    • UNIX / Linux : "\n" ;
    • MAC : "\r"


    Bien sûr, l'espace et la fin de ligne ne sont pas les seuls caractères dits « blancs »…

  5. #5
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    @Steph_ng8:
    Par contre, je ne suis pas sûr du comportement lorsque le premier caractère lu est blanc.
    il est supprimé de la std::string et commence comme si de rien n'était.

    @adel
    ok, mais le probleme est que meme avec mon code est que l'instruction c=="\n" ne fonctionne pas!! y t il un autre moyen pour tester le retour chariot??
    Le deuxième test n'est jamais réalisé dans ton while. Le ET logique et le OU logique ont un principe commun en C++, c'est que si la première condition est vrai, la deuxième n'est pas vérifiée. Dans ton cas, tout les caractères sont différents de l'espace y compris le retour chariot! Donc Lorsque tu arrives en fin de ligne, le programme le voit comme un caractère différent de l'espace mais ne vérifie pas si il est différent du retour chariot.
    Homer J. Simpson


  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par Astraya Voir le message
    @adel
    Le deuxième test n'est jamais réalisé dans ton while. Le ET logique et le OU logique ont un principe commun en C++, c'est que si la première condition est vrai, la deuxième n'est pas vérifiée. Dans ton cas, tout les caractères sont différents de l'espace y compris le retour chariot! Donc Lorsque tu arrives en fin de ligne, le programme le voit comme un caractère différent de l'espace mais ne vérifie pas si il est différent du retour chariot.
    En fait, ce qu'ont le ET et le OU en commun, c'est que si le résultat de l'expression suivante ne modifiera pas le résultat obtenu par l'expression déjà évaluée, l'expression suivante n'est pas évaluée.

    En effet, la table de vérité des opérateurs prend la forme de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       A  |   B  | A ET B | A OU B
    ==============================
     faux | faux |  faux  | faux
     faux | vrai |  faux  | vrai
     vrai | faux |  faux  | vrai
     vrai | vrai |  vrai  | vrai
    On remarque que le OU logique a un "état unique" à vrai: vrai OU n'importe quoi donnera toujours vrai et qu'à l'inverse, le ET logique a un état unique à false : faux ET n'importe quoi donnera toujours faux.

    On en arrive donc à la situation où:
    1. Si la première expression est évaluée à vrai avec l'opérateur OU, la seconde n'est jamais évaluée
    2. Si la première expression est évaluée à faux avec l'opérateur ET, la seconde n'est jamais évaluée
    3. Si la première expression est évaluée à faux avec l'opérateur OU, la seconde est évaluée afin de vérifier qu'elle ne modifie pas le résultat
    4. Si la première expression est évaluée à vrai avec l'opérateur ET, la seconde est évaluée afin de vérifier qu'elle ne modifie pas le résultat
    Mais il y a, effectivement, une optimisation qui est faite au niveau de l'évaluation des différentes expressions qui "zappe" l'évaluation de l'expression suivante si le résultat de celle-ci ne modifie plus le résultat final
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [JDOM] caractère unicode de fin de ligne
    Par iceman dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 31/03/2009, 03h15
  2. Probleme de caractere de fin de ligne
    Par mask66 dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 20/07/2005, 14h09
  3. Fin de ligne dans un fichier
    Par Neekow dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2005, 19h54
  4. Réponses: 2
    Dernier message: 06/12/2004, 11h44

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