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 :

Limiter le nombre de lettres à imprimer avec printf


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Limiter le nombre de lettres à imprimer avec printf
    Bonjour,
    Je dois comparer des chaînes de caractères pour les classer dans l'ordre alphabétique dans un tableau.
    Mon code semble trier correctement mais mon problème est que je dois limiter l'impression à 100 caractères par chaîne et je ne vois pas comment faire...
    Je ne sais pas si je dois limiter le nombre de caractères lors de mon scanf, en supprimer avec ma fonction ou en limiter l'impression avec mon printf.
    J'envoie donc tout mon code, désolé.
    Si quelqu'un a un conseil, merci d'avance.

    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
    34
    35
    36
    37
    38
    39
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdbool.h>
    int compareMots(const void *p1, const void *p2)
    {
       int lettre = 0;
       char* Liste1 = (char*) p1;
       char* Liste2 = (char*) p2;
       int long1 = strlen(Liste1);
       int long2 = strlen(Liste2);
     
     
       while (lettre < long1 && lettre < long2 && Liste1[lettre] == Liste2[lettre]){
          lettre++;
          }
       if (Liste1[lettre] < Liste2[lettre] || Liste1[lettre]=='\0'){
          return false;
          }
       else if (Liste2[lettre] < Liste1[lettre] || Liste2[lettre]=='\0'){
          return true;  
          }
       return 0;
      }
    int main(){
       int nbLignes;  
    scanf("%d\n", &nbLignes);
    char Liste[nbLignes][100];
    for (int idLigne = 0; idLigne <= nbLignes; idLigne = idLigne + 1)
       {
          scanf("%s\n", Liste[idLigne]);
     
          }
    qsort(Liste, nbLignes, 100 * sizeof(char), compareMots);           
     
    for (int a = 0; a <= nbLignes; a = a + 1){
             printf("%s\n", Liste[a]);
          }
       }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par giroll35 Voir le message
    je dois limiter l'impression à 100 caractères par chaîne et je ne vois pas comment faire...
    Utilise la balise code (le bouton #)

    C'est trival




    Édit : c'est trivial, mais il faut bien lire la documentation

  3. #3
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    ce n'est pas %100s mais %.100s (pourcent point cent s)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Effectivement je n'avais pas testé et effectivement, sans le point/ la précision, c'est le minimum (avec 1 bourrage d'espaces si la chaîne est + courte) - j'ai encore lu trop vite et en zigzag.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(int argc, char* argv[])
    {
        char str[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In dignissim libero non leo efficitur pretium. Cras elementum malesuada tellus, vitae venenatis metus efficitur at. Sed tincidunt, purus at ullamcorper venenatis, nulla magna egestas justo, nec aliquam sapien quam interdum tortor. Maecenas nec commodo leo. Quisque molestie nec nulla sed egestas. Aenean nec velit lectus. Morbi convallis ligula non libero viverra pulvinar. Fusce sodales vel est eget dignissim.";
        char small_str[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In dignissim libero non leo efficitur pretium.";
     
        printf ("%100s\n%.100s\n120 here->%120s\n%-120s<-120 here", str, str, small_str, small_str);
     
     
        return EXIT_SUCCESS;
    }

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par giroll35 Voir le message
    mais mon problème est que je dois limiter l'impression à 100 caractères par chaîne et je ne vois pas comment faire...
    Je ne sais pas si je dois limiter le nombre de caractères lors de mon scanf, en supprimer avec ma fonction ou en limiter l'impression avec mon printf.
    La réponse est simple: puisque chaque mot de ton tableau est taillé à 100, c'est lors de la saisie que tu dois gérer. Parce que si tu en reçois 150 que tu tentes de claquer dans le tableau c'est trop tard. Maintenant rien ne t'interdit de faire saisir en illimité dans une zone tampon et ne récupérer (strncpy) que ce qu'il faut.

    Citation Envoyé par giroll35 Voir le message
    J'envoie donc tout mon code, désolé.
    Mouais. T'as raison d'être désolé. Sans déconner, ça te fait plaisir d'écrire aussi porc ? Tu t'es jamais dit qu'un code bien indenté c'était bien plus agréable à lire et à débugguer ?

    Donc les erreurs
    • tu tailles ton tableau à "nb" mots et tu boucles de 0 (inclus) à nb (inclus). Compte sur tes doigts. Par exemple de 0 (inclus) jusqu'à 5 (inclus) ça fait combien de doigts ?
    • ta fonction de comparaison, outre d'être inutilement compliquée (pourquoi compter les lettres identiques? pourquoi gérer '\0' différemment des autres caractères?), doit renvoyer un nombre <0 si mot1<mot2 et >0 si mot1>mot2 or elle renvoie false/true. Est-ce que ça correspond?

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int compareMots(const void *p1, const void *p2) {
    	const char *mot1=(char*)p1;
    	const char *mot2=(char*)p2;
     
     	do {
    		if (*mot1 < *mot2) return -1;
    		if (*mot1 > *mot2) return 1;
     	} while (*mot1++ != '\0' && *mot2++ != '\0');
    	return 0;
    }
    Voilà. Ecrire indenté n'empêche pas d'écrire efficace.
    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]

  6. #6
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    Mouais. T'as raison d'être désolé. Sans déconner, ça te fait plaisir d'écrire aussi porc ? Tu t'es jamais dit qu'un code bien indenté c'était bien plus agréable à lire et à débugguer ?
    Si ce n'est pas lui qui a édité son message pour ajouter les balises de code, alors il n'est pas responsable de cette indentation.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Si ce n'est pas lui qui a édité son message pour ajouter les balises de code, alors il n'est pas responsable de cette indentation.
    Un code sans balise "code" sera tout à gauche de l'écran mais ses indentations s'il en a n'ont pas disparu, simplement elles n'apparaissent plus dans la page. Suffit de rajouter les balises pour les voir réapparaitre telles qu'elles sont. Autrement dit, rajouter les balises ne change rien aux indentations déjà existantes qui sont donc forcément celles du PO.
    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]

  8. #8
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour les conseils...sur la présentation comme sur le fond de mon problème!

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

Discussions similaires

  1. Limiter le nombre de lettres du TextView
    Par soussou angel dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 24/03/2016, 11h11
  2. Bug sur champs limité en nombre de lettres
    Par cedrus dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 09/01/2013, 01h27
  3. Limiter le nombre ne fichiers téléchargés avec tFtpGet
    Par lecompte81 dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 25/11/2011, 09h45
  4. Réponses: 6
    Dernier message: 25/03/2010, 14h36
  5. Réponses: 11
    Dernier message: 10/10/2007, 14h44

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