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 :

contraire de \n ???


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut contraire de \n ???
    Bonsoir,



    Existe t-il une instruction en C du même type que printf("\n"); mais qui remonte une ligne?




    sincerement

  2. #2
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut
    il y a la fonction gotoxy (conio.h) qui permet de placer ton curseur mais la librairie conio.h ne fait pas partie de la norme standard du C, elle n'est donc pas disponible sur tous les compilateurs.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Et aux dernières nouvelles, elle ne marche pas au-dela de 45 lignes (dommage pour les terminaux hauts comme l'écran comme on y a droit sous X)...

    En fait, je ne crois pas qu'il y ait un moyen standard de remonter d'une ligne: la sortie standard est supposée pouvoir être une bête imprimante ou un fichier, et aucun des deux ne peut "remonter d'une ligne"...

  4. #4
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Tu peux simuler une pression sur la touche "fleche haut" comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      printf("%c%c%c", 27, 91, 65);
    Mais c'est a tester. Tu remontes, c'est sur. Mais l'endroit ou te retrouve depend de ton environnement de travail.

    <edit>
    En fait c'est l'equivalent d'un lf a l'envers. Il faut revenir au debut de la ligne ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      printf("%c%c%c\r", 27, 91, 65);
    </edit>

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("\n\nDebut de ma phrase %c%c%c\rFin de ma phrase\n\n\n", 27, 91, 65);
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ cc -o test printf.c
    $ ./test
     
    Fin de ma phrase
    Debut de ma phrase
     
    $

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut
    comment fonctionne la fonction gotoxy?

    autrement dit:
    Soit i=1 la premiere ligne de la console, mon programme affiche des chaînes de caracteres jusqu'à la ligne i'>i. Comment dois je faire pour retrouver une ligne i pour compléter ma chaîne ensuite?

  6. #6
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par 123quatre
    comment fonctionne la fonction gotoxy?

    autrement dit:
    Soit i=1 la premiere ligne de la console, mon programme affiche des chaînes de caracteres jusqu'à la ligne i'>i. Comment dois je faire pour retrouver une ligne i pour compléter ma chaîne ensuite?
    gotoxy n'est vraiment pas portable
    Pour son fonctionnement...l'origine est le coin superieur gauche de l'ecran, tu deplaces le curseur aux coordonnées souhaitées (il doit y avoir une fonction du meme genre pour connaitre ta position actuelle), puis tu peux refaire un printf, il se fera là où tu t'es repositionné.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut
    Jack_serious tu peux m'expliquer comment marche ton astuce?

  8. #8
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par 123quatre
    Jack_serious tu peux m'expliquer comment marche ton astuce?
    Il me semble qu'il l'a bien fait...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut
    Je veux dire comment marche le printf("%c%c%c", 27, 91, 65);


    à quoi correspondent ces chiffres?

    merci

  10. #10
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Bien sur.

    En fait, les appuis sur les touches speciales du clavier, typiquement les fleches, sont envoyees comme une serie de valeurs ASCII.

    Demonstration: je tape successivement Q, [fleche_haut], W, [fleche_bas], E dans un programme qui m'affiche les caracteres tapes ainsi que leurs valeurs ASCII et j'obtiens ca en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Q --> 81                     // Q
     --> 27                      //   Fleche haut    
    [ --> 91                       //      suite
    A --> 65                      //      fin fleche haut
    W --> 87                     // W
     --> 27                      //   Fleche bas
    [ --> 91                       //       suite
    B --> 66                      //       fin fleche bas
    E --> 69                      // E
    L'appui sur la fleche du haut te faisant remonter d'une ligne, il faut generer ce signal en envoyant les valeurs des 3 caracteres qui lui correspondent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     printf("%c%c%c", 27, 91, 65);
    Veut dire : "afficher les caracteres 27, 91, 65"

    Donc tu affiche les trois caracteres correspondant a la fleche du haut, et tu affiche un \r ou "retour chariot" pour revenir au debut de la ligne. Et tu es remonte d'un etage.

    <Note>
    Pour ceux qui aiment les choses inutiles, pour remonter dans l'historique dans un shell Unix au lieu de taper sur la fleche du haut on peut faire Esc [ A ... C'est une illustration du principe ci dessus.
    </Note>

    PAR CONTRE, j'ai teste ca a l'arrache sur un shell Unix, je n'ai pas la moindre idee de ce que ca peut faire sur un autre systeme.

    Ceux qui savent ? Est ce que c'est portable cette ruse de sioux ?

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: contraire de \n ???
    Citation Envoyé par 123quatre
    Existe t-il une instruction en C du même type que printf("\n"); mais qui remonte une ligne?
    "/u" ?

    nan, j'déconnne

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut
    merci à toi, j'ai testé sous windows:

    Code : 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()
    {
        printf("\n\n\n"); // saute 3 lignes
        printf("%c%c%c", 27,91,65); // supposé remonter
        printf("\r123quatre"); // c'est moi !
        getch();
        return 0;
    }
    ça me rend ça:
    donc ça marche pas, qq a une solution?

  13. #13
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Moi ça marche nickel !
    Encore une fois LINUX POWER

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par 123quatre
    merci à toi, j'ai testé sous windows:

    Code : 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()
    {
        printf("\n\n\n"); // saute 3 lignes
        printf("%c%c%c", 27,91,65); // supposé remonter
        printf("\r123quatre"); // c'est moi !
        getch();
        return 0;
    }
    ça me rend ça:
    donc ça marche pas, qq a une solution?
    En principe, c'est \v, mais je trouve la sémantique assez obscure...
    5.2.2 Character display semantics
    1 The active position is that location on a display device where the next character output by
    the fputc function would appear. The intent of writing a printing character (as defined
    by the isprint function) to a display device is to display a graphic representation of
    that character at the active position and then advance the active position to the next
    position on the current line. The direction of writing is locale-specific. If the active
    position is at the final position of a line (if there is one), the behavior of the display device
    is unspecified.
    2 Alphabetic escape sequences representing nongraphic characters in the execution
    character set are intended to produce actions on display devices as follows:
    \a (alert) Produces an audible or visible alert without changing the active position.
    \b (backspace) Moves the active position to the previous position on the current line. If
    the active position is at the initial position of a line, the behavior of the display
    device is unspecified.
    \f ( form feed) Moves the active position to the initial position at the start of the next
    logical page.
    \n (new line) Moves the active position to the initial position of the next line.
    \r (carriage return) Moves the active position to the initial position of the current line.
    \t (horizontal tab) Moves the active position to the next horizontal tabulation position
    on the current line. If the active position is at or past the last defined horizontal
    tabulation position, the behavior of the display device is unspecified.
    \v (vertical tab) Moves the active position to the initial position of the next vertical
    tabulation position. If the active position is at or past the last defined vertical
    tabulation position, the behavior of the display device is unspecified.
    Sinon, on peut toujours jouer avec les séquences VT100 (aka 'ANSI')

    http://emmanuel-delahaye.developpez....htm#pleinecran

    En fait, il y a un problème de conception chez toi. Soit tu fait du conversationnel traditionel, et tu n'as pas besoin de remonter d'une ligne, soit tu fais du plein écran, et dans ce cas, tu places le curseur où tu veux. Tu n'as, là non plus, pas besoin de remonter d'une ligne.

  15. #15
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par sorry60
    Moi ça marche nickel !
    Encore une fois LINUX POWER
    Mode troll off plz merci
    8) 8) 8)

  16. #16
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    \v (vertical tab) Moves the active position to the initial position of the next vertical
    tabulation position. If the active position is at or past the last defined vertical
    tabulation position, the behavior of the display device is unspecified.
    En fait la tabulation verticale ca descend d'une ligne mais en te positionnant au meme niveau horizontal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ________\v
             __________
    Ajout:

    123quatre, Pour trouver la sequence equivalente sous Windows essaie de faire un petit bout de prog qui t'affiche la valeur des caracteres tapes. Comme ce que j'ai poste plus haut.

    Je ne peux helas pas te passer le mien, il utilise des appels systemes Unix pour que le term fasse ce que je lui demande ( ioctl() and co.).

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jack_serious
    En fait la tabulation verticale ca descend d'une ligne mais en te positionnant au meme niveau horizontal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ________\v
             __________
    Pour moi, c'est '\n' qui fait ça (en mode raw).

    En tout cas, avec Code::Blocks (mingw), ça ne fonctionne pas. Ca me fait des espèces de flèches.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 256
    Points : 75
    Points
    75
    Par défaut
    ok, je vais voir ce que ça fait. Tout ça juste pour ecrire un prog qui affiche des carrés imbriqués. Un camarade de classe ma lancé ce défit, nous débutants en C.

    Pour la peine je vous envoi le code source dès que j'ai fini!

  19. #19
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Jack_serious
    En fait la tabulation verticale ca descend d'une ligne mais en te positionnant au meme niveau horizontal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ________\v
             __________
    Pour moi, c'est '\n' qui fait ça (en mode raw).

    En tout cas, avec Code::Blocks (mingw), ça ne fonctionne pas. Ca me fait des espèces de flèches.
    Je m'en doutais un peu. C'etait du bricolage. Tant pis...

    Mais ca manque un peu de norme cette histoire. L'affichage du texte sur une console entre plusieurs systemes, c'est un peu l'aventure. Et le mode plein ecran n'est pas vraiment uniforme non plus...
    Quoique avec les termcaps on arrive a faire des choses interressantes.

    Pour notre ami 123quatre, si tu veux des choses interressantes pour la gestion de l'affichage en mode console (pour plus tard, la c'est pas la peine), je te conseille de chercher a "termcaps". Mais c'est mon avis...

Discussions similaires

  1. contraire de la fonction select()
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/04/2006, 16h39
  2. Connecter mysql à access en ODBC (et non le contraire)
    Par guidav dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 28/03/2006, 14h51
  3. Contraire de Settimer
    Par K.othmane dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 29/11/2005, 18h50
  4. [regexp] contraire a regexp
    Par titiyo dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 21h59
  5. Contraire de NIL
    Par PierDIDI dans le forum Langage
    Réponses: 5
    Dernier message: 16/09/2002, 12h14

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