Bonsoir,
Existe t-il une instruction en C du même type que printf("\n"); mais qui remonte une ligne?
sincerement
Bonsoir,
Existe t-il une instruction en C du même type que printf("\n"); mais qui remonte une ligne?
sincerement
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.
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"...
Tu peux simuler une pression sur la touche "fleche haut" comme ceci :
Mais c'est a tester. Tu remontes, c'est sur. Mais l'endroit ou te retrouve depend de ton environnement de travail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 printf("%c%c%c", 27, 91, 65);
<edit>
En fait c'est l'equivalent d'un lf a l'envers. Il faut revenir au debut de la ligne ensuite:
</edit>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 printf("%c%c%c\r", 27, 91, 65);
Exemple :
Donne :
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);
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 $
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 portableEnvoyé par 123quatre
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é.
Jack_serious tu peux m'expliquer comment marche ton astuce?
Il me semble qu'il l'a bien fait...Envoyé par 123quatre
Je veux dire comment marche le printf("%c%c%c", 27, 91, 65);
à quoi correspondent ces chiffres?
merci
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 :
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
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
Veut dire : "afficher les caracteres 27, 91, 65"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 printf("%c%c%c", 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 ?
"/u" ?Envoyé par 123quatre
nan, j'déconnne
merci à toi, j'ai testé sous windows:
ça me rend ça:
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; }
donc ça marche pas, qq a une solution?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4123quatre
Moi ça marche nickel !
Encore une fois LINUX POWER
En principe, c'est \v, mais je trouve la sémantique assez obscure...Envoyé par 123quatre
Sinon, on peut toujours jouer avec les séquences VT100 (aka 'ANSI')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.
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.
Mode troll off plz merciEnvoyé par sorry60
8) 8) 8)
En fait la tabulation verticale ca descend d'une ligne mais en te positionnant au meme niveau horizontal.Envoyé par Emmanuel Delahaye
Ajout:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3________\v __________
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.).
Pour moi, c'est '\n' qui fait ça (en mode raw).Envoyé par Jack_serious
En tout cas, avec Code::Blocks (mingw), ça ne fonctionne pas. Ca me fait des espèces de flèches.
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!
Je m'en doutais un peu. C'etait du bricolage. Tant pis...Envoyé par Emmanuel Delahaye
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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager