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 :

Boucle avec affichage incohérent en C, ok en Bash


Sujet :

C

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut Boucle avec affichage incohérent en C, ok en Bash
    Bonsoir,

    Ayant découvert, grace à ce post, où se trouvaient les 4 symboles des jeux de carte (carreau, trèfle, etc.),
    et ayant également découvert (en testant bêtement les trous) qu'il y en avait d'autres en A1, 2, 4 et 7,
    il m'est venu l'idée de faire une 'tite boucle pour les afficher facilement, mais mal m'en a pris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i=0; i<8; i++) {
    	printf("\xE2\x99\xA%c", i); // avec ou sans '\n' à la fin de la chaîne c'est pareil.
    }
    Ce bout de code affiche des choses incohérentes, style des petits carrés 2x2 contenant 00 01, 00 02, etc. (et l'affichage dans un navigateur n'arrange rien,
    je vois bien en "Prévisualisation du message" que c'est autre chose qui s'affiche *ici* ) :
    
    
    
    

    
    Par contre, en y allant ligne par ligne, ça fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    printf("\xE2\x99\xA0");
    printf("\xE2\x99\xA1");
    printf("\xE2\x99\xA2");
    Et en Bash, la même boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char=( 0 1 2 3 4 5 6 7 )
    for i in ${char[*]}; do printf "\xE2\x99\xA$i"; done
    fonctionne aussi :
    ♠♡♢♣♤♥♦♧

    Une idée de comment faire afficher correctement ma boucle en C ?

    Merci d'avance,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonsoir,

    un code qui fait ce que tu attends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
     
    int main()
    {
      for(int i=0; i<8; i++) {
        printf("\xE2\x99%c", 0xA0 + i); // avec ou sans '\n' à la fin de la chaîne c'est pareil.                                                    
      }
     
      return 0;
    }
    Le format du printf ne vas pas concaténer le %c à la fin de 0xA pour avoir un code hexa sur 2 chiffres, mais va simplement afficher le caractère 0xA suivi du caractère de code ascii i.
    Or tu veux afficher la séquences de trois caractères ascii 0xE2 0x99 puis 0xA0 jusqu'à 0xA7 ...

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Le format du printf ne vas pas concaténer le %c à la fin de 0xA pour avoir un code hexa sur 2 chiffres, mais va simplement afficher le caractère 0xA suivi du caractère de code ascii i.
    Or tu veux afficher la séquences de trois caractères ascii 0xE2 0x99 puis 0xA0 jusqu'à 0xA7 ...
    Trop fort !

    Mille millions de mercis, et bonne fin de soirée,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. [MySQL] Boucle : Classer par champ avec affichage unique
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/10/2014, 18h26
  2. Problème boucle avec affichage tableaux
    Par lamouette76 dans le forum C
    Réponses: 11
    Dernier message: 08/10/2007, 19h05
  3. Probleme avec affichage de date
    Par Wongmaster dans le forum Access
    Réponses: 27
    Dernier message: 24/12/2004, 20h51
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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