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 :

Gestion automatique des retours de chariot dans un programme console


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut Gestion automatique des retours de chariot dans un programme console
    Bonjour à quiconque lira ce message,

    Je programme depuis quelques temps en C++ pour m'amuser, et suis en ce moment en train de programmer un petit jeu en texte sur console. Seulement je me heurte à un problème qui est que par défaut, la console affiche 80 caractères de texte sur une ligne, et si le texte que je veux afficher fait plus de 80 caractères, il est assez probable qu'un mot soit coupé et affiché en deux parties sur deux lignes parce qu'il dépasse des 80 caractères de la ligne.
    J'ai essayé de résoudre ce problème en mettant manuellement des endl à chaque fois, mais ça s'avère très laborieux.
    J'aimerais savoir si il est possible de faire en sorte que le programme affiche simplement ce dernier mot tronqué sur la prochaine ligne au lieu de le couper, et ce pour un n'importe quel texte entré.

    Merci pour votre temps, Sergenti.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    oui, mais tu n'auras pas de fonction toute faite pour cela du moins à ma connaissance).
    Il te faut lire caractère par caractère et faire un traitement avant affichage de celui-ci à l'écran. L'idée étant si tu es à la fin de la ligne de remonter en arrière caractère par caractère jusqu'à trouver un espace. De là tu effaces la fin de la ligne, positionne le curseur à ligne suivante et réaffiche les caractères effacés.

    Tu aura peut-être des bibliothèques pour faire cela. vi sous Linux le gère très bien.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Salut, tu as un moyen (plutôt sale) d"agrandir la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System("mode con cols=x lines=y");
    Remplace x par le nombre de colonnes et y par le nombres de lignes.

    Sinon tu peux compter le nombre de caractères dans ta chaîne et avec une regex tu peux trouvé où se situe un espace et danq ce cas tu affiche le reste dur la deuxième ligne. Pour ce qui en est des retours à la ligne ( je ne connais plus très bien la console) as tu essayé un \n ?

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    il va te falloir faire de l'algorithmique mais c'est un besoin assez classique.
    Tant que la chaîne à afficher est plus longue que 80 caractères, tu cherches le dernier caractère (espace mais pourquoi pas aussi virgule, tiret, ...) que tu peux utiliser pour découper la chaîne, affiche la chaîne jusque là, un retour à la ligne et continue de traiter le reste.
    Attention au cas particulier que tu ne manqueras sûrement pas de rencontrer : si un mot seul fait 80 caractères, découpe-le avec un - en fin de ligne.
    Tu déroules ça et t'as gagné.
    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.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut
    Bonjour et merci à tous pour vos réponses, j'ai pris en compte vos réponses et suis arrivé à cet algorithme (je crois qu'on peut appeler ça un algorithme):

    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
    #include <string>
    #include <ctype.h>
     
    void displayText(string text)
    {
    	const unsigned CONSOLE_WIDTH(80);
    	unsigned width(0);
    	width = CONSOLE_WIDTH;
     
    	string buffer("");
    	char character('a');
    	char charincr('a');
     
    	while (text.length() >= CONSOLE_WIDTH)
    	{
        	for (int i = width; i > 0; i--) //read string backwards char by char starting from pos 80 (CONSOLE_WIDTH)
        	{
        		character = text[i];
     
        		if (isalpha(character) || ispunct(character))
        		{
        			charincr = text[(i+1)];
        			if(isalpha(charincr) || ispunct(charincr)) {} 	//next char is a letter -> inside a word -> coninue backwards (continue the loop)
        			else if (isspace(charincr)) 				//next char is a space -> the current char is the end of a word -> cut string and display line.
        			{
        				buffer = text.substr(0,(i+1));
            			cout << buffer << endl;
            			text.erase(0, (buffer.length()+1));
            			i=0; 			//force loop end
            			width = CONSOLE_WIDTH;  // reset width
        			}
        		}
        	}
    	}
    cout << text << endl;
    }
    Seulement il fonctionne uniquement sur trois lignes, et après, des erreurs dont je n'arrive pas à comprendre l'origine apparaissent (des lignes trop longues de 1 seul caractère, des retours de chariot en trop qui créent des trous d'une ligne entre deux lignes de texte)

    Ça fait maintenant quelques jours que je m'arrache la tête, que je change des paramètres sans jamais régler ces problèmes, parce que pour moi le protocole me semble exact, c'est pourquoi j'aimerais beaucoup avoir un regard extérieur sur cet algorithme.

    Merci encore pour votre temps, Sergenti.

  6. #6
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Recherche word wrap algorithm C++ tu devrais trouver

Discussions similaires

  1. Gestion automatique des positions des noeuds dans un graph
    Par maissaab dans le forum Général Python
    Réponses: 7
    Dernier message: 30/04/2011, 22h32
  2. Réponses: 7
    Dernier message: 16/09/2008, 19h09
  3. Réponses: 4
    Dernier message: 26/03/2008, 09h43
  4. [IDE] Gestion automatique des headers d'unités
    Par Clorish dans le forum Outils
    Réponses: 1
    Dernier message: 27/06/2005, 18h52

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