10
votes

Comment imprimer une chaîne à la console à des coordonnées spécifiques en C ++?

J'essaie d'imprimer des caractères dans la console à des coordonnées spécifiées. Jusqu'à présent, j'ai utilisé le très moche printf ("\ 033 [% d;% dh% s \ n", 2, 2, "str"); mais je devais juste demander si C ++ avait une autre façon de le faire. Le problème n'est même pas que c'est moche, le problème se pose lorsque j'essaie de me faire une fonction plus jolie comme si: XXX

Cela ne fonctionne pas, même si je plaçait à (char *) . Un autre problème est que je dois imprimer le \ n pour que la page soit actualisée ... Je ne profite tout simplement pas d'utiliser printf en général.

Similaire à utiliser COUT au lieu de printf , je crois qu'il devrait y avoir un moyen plus récent de le faire (idéalement un moyen qui me permet d'écrire facilement des chaînes où je vouloir sur l'écran, et idéalement un moyen qui ne nécessite pas ces symboles étranges: \ 033 [% d;% dh )

Alors, faites-vous ce que vous avez 'm à la recherche?


2 commentaires

Sur quelle plate-forme travaillez-vous?


Ubuntu 9.04, j'utilise g ++ pour compiler


7 Réponses :


14
votes

Curse est ce que vous recherchez.


1 commentaires

Je ne trouve pas quoi inclure pour avoir accès aux malédictions. Je ne peux pas non plus trouver de documentation pour l'API ..



6
votes

Ce que vous faites est d'utiliser des caractères magiques spécifiques très spécifiques dans une application sinueuse C ++. Bien que cela fonctionne, vous aurez probablement un temps de beaucoup plus facile à utiliser une bibliothèque qui vous empêche de traiter des détails de mise en œuvre spécifiques au terminal et fournit des fonctions qui font ce dont vous avez besoin.

Étudier si des malédictions ou des bibliothèques de ncurses sont disponibles pour votre système.


0 commentaires

6
votes

Quelques améliorations à votre fonction: xxx pré>

cette version: p>

  • vous permet d'utiliser n'importe quelle chaîne de format arbitraire et des listes d'arguments variables li>
  • flushes automatiquement stdout code> sans imprimer une nouvelle ligne li>
  • utilise x code> et y code> dans la chaîne de format (Votre utilisation de x code> et x code> peut avoir été un TYPO) LI> ul>

    Cependant, car Varargs est essentiellement une caractéristique C et ne comprend pas vraiment les objets C ++, vous devez l'appeler comme ceci: P>

    printToCoordinates(10, 10, "%s", text.c_str());
    


2 commentaires

qu'est-ce que le fflush (stdout); faire une partie?


Normalement stdout est "tamponné", ce qui signifie que la bibliothèque d'exécution C faisce que vous imprimez et ne l'envoie à la console lorsque (a) que vous produisez une nouvelle ligne, (B) la file d'attente de la file d'attente, ou (c) que vous affleurez manuellement le fichier. . Utilisation de fflush () Dans ce cas est plus simple et évidente que l'impression d'une nouvelle ligne (et elle évitera des problèmes de défilement si vous essayez d'imprimer des trucs sur la ligne inférieure de l'écran).



13
votes

Je me souviens d'utiliser gotoxy (x, y) Code> dans Turbo C ++ (CONIO.H) - Je ne sais pas si cela fonctionnera pour vous cependant. Il déplace le curseur sur les coordonnées spécifiées par x code> et y code>.

éditer: strong> Si vous utilisez Windows, voici un Gotoxy Code> Clone: ​​ P>

#include <windows.h>

void gotoxy(int x, int y)
{
  COORD coord;
  coord.X = x;
  coord.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}


1 commentaires

std_output_handle a un espace dedans. Assurez-vous de le supprimer.



4
votes

Premier: xxx

Vous ne souhaitez pas copier l'argument de chaîne, vous souhaitez la transmettre par ( const ). En outre, la seule façon de recevoir un char * à partir d'un std :: string est d'appeler son C_STR () Fonction membre: xxx

sur votre question: C ++ n'a aucun moyen de faire ce que vous voulez, mais cela vous permet d'utiliser des moyens spécifiques à la plate-forme de le faire. Vous devriez nous dire votre plate-forme afin d'obtenir des réponses significatives.


1 commentaires

Devrait être printf (...., x, y, texte); pas printf (..., x, x, texte) .. Impossible d'éditer ci-dessus.



0
votes
void screenpos(int x,int y,char textyowanawrite[20])
{
//printf for right shift
// \n for downward shift
//loops through the rows and shifts down 
for(int row=0;row<=y;row++)
{
printf("\n");
for (int i = 0; i < x; i++)
{
printf("%s "," " );
}
}
printf("%s ",textyowanawrite );
} 
//this should work to certain extinct only problem is u cant go from 
   somewhere like 4,4 to 2,2 thats the problem 

0 commentaires

-1
votes

J'ai une méthode différente différente. Je ne sais pas si c'est mieux que celui des ncurses, alors je quitte que les UPVOTERS décident.

Vous pouvez utiliser Graphics strong> Package en C ++ pour sortir un texte à une coordonnée spécifique sur votre écran de travail. La syntaxe est outtextxy (x, y, texte); code> Où les coordonnées x & y sont des coordonnées. P>

Un exemple est le suivant: P>

int main(void) {

    int gdriver = DETECT, gmode;

    int x = 200, y = 200;

  

    initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

  

    outtextxy(x, y, "Hello World");

    closegraph();

 }


1 commentaires

Le package graphique est non standard et probablement indisponible sur Ubuntu, la plaque de l'OP