Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1116 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Fonction gotoligcol

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Fonction gotoligcol

n°2163335
dalk64
Posté le 09-11-2012 à 22:03:10  profilanswer
 

Bonjour,
 
J'ai une question assez bête je suppose, voici déjà mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. void gotoligcol( int lig, int col )
  5. {
  6.     COORD mycoord;
  7.     mycoord.X = col;
  8.     mycoord.Y = lig;
  9.     SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), mycoord );
  10. }
  11. int main()
  12. {
  13.     printf("A A" ); printf("\nA la ligne" );
  14.     gotoligcol(0, 1); printf("B" );
  15. }


 
Bon but est d'afficher :
 
ABA
A la ligne

 
Mais ce qui s'affiche est :
 
ABA
 
Le problème est donc que "A la ligne" ne s'affiche pas sur la console, j'en déduis que l'on ne peut pas afficher ce qui est après les caractères insérés par gotoligcol (ici le "B" ?)
C'est très ennuyeux, ou alors je suis à côté de la plaque ?
 
Si quelqu'un pouvait m'éclairer à ce sujet s'il vous plait, merci  :??:  

mood
Publicité
Posté le 09-11-2012 à 22:03:10  profilanswer
 

n°2163341
gilou
Modérateur
Modzilla
Posté le 09-11-2012 à 23:22:09  profilanswer
 

J'ai compilé, exécuté, et...

B
C:\clang>gcc -o gotol.exe gotol.c
 
C:\clang>gotol
A A
A la ligne


Il y a bien un B en (0, 1) :D
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2163342
dalk64
Posté le 09-11-2012 à 23:29:01  profilanswer
 

Mon problème est d'afficher ce qu'il y a après en fait, le "B" s'affiche en effet très bien, c'est le principe de la fonction :D

n°2163343
gilou
Modérateur
Modzilla
Posté le 09-11-2012 à 23:29:27  profilanswer
 

Tiens, voici quelques fonctions de base utiles dans ce contexte:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <windows.h>
  5. // handle global pour la console
  6. static HANDLE hConsole = NULL;
  7. static SHORT  ConsoleWidth  = 0;
  8. static SHORT  ConsoleLength = 0;
  9. static SHORT  CursorStartX  = 0;
  10. static SHORT  CursorStartY  = 0;
  11. bool InitConsole() {
  12.     hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  13.     if (hConsole != INVALID_HANDLE_VALUE) {
  14.         CONSOLE_SCREEN_BUFFER_INFO cBufferInfo;
  15.         if (GetConsoleScreenBufferInfo(hConsole, &cBufferInfo)) {
  16.             ConsoleWidth  = cBufferInfo.dwSize.X;
  17.             ConsoleLength = cBufferInfo.dwSize.Y;
  18.             CursorStartX  = cBufferInfo.dwCursorPosition.X;
  19.             CursorStartY  = cBufferInfo.dwCursorPosition.Y;
  20.             return true;
  21.         }
  22.     }
  23.     return false;
  24. }
  25. bool ClrScrn(void) {
  26.     COORD coord = {0};
  27.     DWORD written;
  28.     FillConsoleOutputCharacter(hConsole, TEXT(' '), ConsoleWidth * ConsoleLength, coord, &written);
  29.     SetConsoleCursorPosition(hConsole, coord);
  30.     CursorStartX  = 0;
  31.     CursorStartY  = 0;
  32.     return (written == ConsoleWidth * ConsoleLength);
  33. }
  34. void GotoXY(int x, int y) {
  35.     COORD coord = {x, y};
  36.     SetConsoleCursorPosition(hConsole, coord);
  37. }
  38. void GetXY(SHORT *x, SHORT *y) {
  39.     CONSOLE_SCREEN_BUFFER_INFO  csbInfo;
  40.     GetConsoleScreenBufferInfo(hConsole, &csbInfo);
  41.     *x = csbInfo.dwCursorPosition.X;
  42.     *y = csbInfo.dwCursorPosition.Y;
  43. }
  44. void ClrEol() {
  45.     COORD curpos;
  46.     DWORD written;
  47.     GetXY(&curpos.X, &curpos.Y);
  48.     FillConsoleOutputCharacter(hConsole, TEXT(' '), ConsoleWidth - curpos.X, curpos, &written);
  49.     GotoXY(curpos.X, curpos.Y);
  50. }
  51. int main() {
  52.     if (InitConsole()) {
  53.         //Ton code ici
  54.         return (EXIT_SUCCESS);
  55.     }
  56.     return (EXIT_FAILURE);
  57. }

Ca marche très bien chez moi avec gcc.
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2163344
gilou
Modérateur
Modzilla
Posté le 09-11-2012 à 23:32:04  profilanswer
 

dalk64 a écrit :

Mon problème est d'afficher ce qu'il y a après en fait, le "B" s'affiche en effet très bien, c'est le principe de la fonction :D


Probablement parce qu'il ya pas un fflush(stdout); après le printf("\nA la ligne" ); qui n'a pas de \n final (et donc pour lequel le flush du buffer n'est pas automatique).
 
A+,


Message édité par gilou le 09-11-2012 à 23:32:23

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2163346
dalk64
Posté le 09-11-2012 à 23:49:54  profilanswer
 

Merci de votre réponse,
j'ai réessayé avec un fflush(stout); après le printf, mais rien ne change.  
Je précise que je suis débutant dans le domaine.

n°2163347
gilou
Modérateur
Modzilla
Posté le 10-11-2012 à 00:18:05  profilanswer
 

Aucune idée, chez moi ça marche.
Tout au plus je réécrirais le code de manière plus conventionnelle:
printf("A A\n" );  
printf("A la ligne" );
fflush(stdout);
gotoligcol(0, 1);
printf("B" );
 
A+,


Message édité par gilou le 10-11-2012 à 00:20:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Fonction gotoligcol

 

Sujets relatifs
fonction qui appelle une fonction de la même classe[VBA] Fonction find avec plusieurs criteres
[C/Reseau] Protocole FTP/ mode passif/ LIST&GETFonction excel
Fonction GetObject dans un webservice en ASP.NETComment ajouter Order by dans cette fonction ?
programme C :jeu de cartesProgramme C++ , erreur ? Ou ça ?
Problème compréhension fonction .item[C] Conversion type énuméré en string pour affichage :
Plus de sujets relatifs à : [C] Fonction gotoligcol


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR