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 :

Problème d'espace avec printf


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut Problème d'espace avec printf
    Bonjour a tous,

    Voici mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=2; i < argc; i++)
    	{
    		b = strtoul(argv[i],NULL,2);
    		int count = distance(a,b);
    		printf("%d ",count);
    	}
    Cela m'affiche des nombres avec un espace à chaque fois. J'aurai aimé que pour le dernier nombre, l'espace de fin soit supprimé.

    J'ai comme solution de passer par une variable (au lieu de printf). Après la boucle, supprimer le dernier caractère et seulement afficher la variable.

    Auriez vous une autre possibilité?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 144
    Billets dans le blog
    4
    Par défaut
    Le dernier tour de boucle sera pour i == argc-1, tu peux simplement mettre un if pour afficher ou non un espace.
    Il est sûrement même plus simple de ne pas afficher lors de la première itération puis mettre l'espace devant sur les itérations suivantes.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut
    Merci pour votre idée. J'ai même simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    b = strtoul(argv[2],NULL,2);
    		int count = distance(a,b);
    		printf("%d",count);
     
    	for (i=3; i < argc; i++)
    	{
    		b = strtoul(argv[i],NULL,2);
    		int count = istance(a,b);
    		printf(" %d",count);
    	}

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par sebaaas Voir le message
    Merci pour votre idée. J'ai même simplifié
    Le souci de ta simplification c'est que tu répètes 2 fois ton code, ce qui n'est pas très économique ni très évolutif (si demain tu veux afficher par exemple [1] [2] [3] te faudra faire 2 modifs).

    Tu peux par exemple écrire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=2; i < argc; i++) {
    	b = strtoul(argv[i],NULL,2);
    	printf("%c%d",i > 2 ?' ' :'', distance(a,b));
    }
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 442
    Par défaut
    Bonjour,

    Citation Envoyé par Sve@r Voir le message
    Tu peux par exemple écrire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	printf("%c%d",i > 2 ?' ' :'');
    Attention : ceci ne fonctionnera pas car tu ne peux pas passer de « caractère vide » !
    En revanche, cela fonctionnera parfaitement avec une chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%s%d",i > 2 ? " " : "");

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 753
    Par défaut
    Hello,

    Il suffit de remplacer le caractère vide par 0x00: printf("%c", i>2 ? ' ' : 0x00);

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 442
    Par défaut
    Bonjour,

    Citation Envoyé par edgarjacobs Voir le message
    Il suffit de remplacer le caractère vide par 0x00: printf("%c", i>2 ? ' ' : 0x00);
    Ce n'est malheureusement pas une bonne idée non plus parce que le caractère sera quand même émis, même s'il ne se voit pas (ce qui n'est pas garanti sur tous les viewports) et se retrouvera écrit en dur dans le fichier final si la sortie standard n'est pas l'écran, voire renvoyé tel quel au processus suivant en cas de pipe.

    En plus, le code « 00 » est considéré comme le terminateur de chaîne en langage C. Donc l'insérer artificiellement coupera ta chaîne en deux s'il ne se trouve pas à sa fin.
    Exemple :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int main (void)
    {
        char buffer[128] = { 0 };
     
        sprintf(buffer,"Caractère nul ->%c<- inséré ici.\n",0x00);
        puts(buffer);
     
        return 0;
    }

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./nullchar
    Caractère nul ->

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 799
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Attention : ceci ne fonctionnera pas car tu ne peux pas passer de « caractère vide » !
    Ouais, j'y pensais un peu en écrivant mon exemple Mais j'ai eu la flemme de tester...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [PERL] Problème d'espace avec glob()
    Par sephiburp dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 11/06/2009, 14h49
  2. Problème d'espace avec lien sur image
    Par kanabzh29 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 07/06/2009, 13h56
  3. Problème d'espace avec DB_RECOVERY_FILE_DEST_SIZE
    Par elharet dans le forum Administration
    Réponses: 1
    Dernier message: 06/04/2009, 17h59
  4. Problème d'espace avec unset et array_search
    Par Gunner4902 dans le forum Langage
    Réponses: 2
    Dernier message: 22/07/2008, 09h30
  5. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 18h30

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