begin process at 2012 05 29 05:06:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Fonction system("clr"); et return;


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction system("clr"); et return;

mardi 24 novembre 2009 à 22:45:50 | Fonction system("clr"); et return;

BabyAzerty

Bonjour,


Je suis en train de programmer un pendu en C basé sur des fonctions gotoligcol (pour l'affichage du pendu, du mot a chercher, etc)


D'abord j'affiche une banniere de bienvenue et je souhaite que cette bannière reste pendant toute la durée du jeu !

Ensuite en dessous, il y a un menu qui apparait au début proposant le choix d'un niveau de difficulté

Puis lors du choix, je souhaite que tout le menu disparaisse MAIS que la bannière de bienvenue reste.

Comment je fais ?
Car avec system("clr"); j'ai tout qui disparait !!
Donc j'aimerais ciblé une zone à "clearer" et non tout le screen.



Pour la fonction return
Je pose par exemple un switch (pour le choix du niveau)
Avec case 1 = Niveau facile
Et case 2 = Niveau difficile
Puis j'ajoute un default = Erreur de saisie.
Mais j'aimerais bien qu'à la suite du default, le programme ne fasse rien (tout en laissant en place la bannière et le menu)
En gros je cherche une fonction "ignorer".


Cordialement,

B.A
Ensuite j'aimerai savoir comment faire
mercredi 25 novembre 2009 à 09:52:54 | Re : Fonction system("clr"); et return;

CptPingu

Administrateur CodeS-SourceS
Evite les appels à system, tu tues la portabilité pour une fonctionnalité très discutable.
"Clearer" l'écran n'est pas forcément une bonne chose. tu embêtes généralement l'utilisateur qui n'a rien demandé. Un programme console ne réagit pas comme un programme fenêtré, tout ce qui est marqué reste, et c'est tout à fait normal.

Maintenant, si tu veux vraiment réaliser cela, il te suffit de "clearer" l'écran et de redessiner la bannière juste après.
Il n'y a pas de fonction ignorer, il suffit de ne rien faire. Si ta boucle est correctement construite, ça devrait fonctionner.
mercredi 25 novembre 2009 à 18:49:57 | Re : Fonction system("clr"); et return;

BabyAzerty

Merci pour la réponse.


Mais pour la bannière suite au system("cls");
Est-ce que je dois obligatoirement réécrire (avec un copier-coller) le code ? Ou est-ce qu'il existe une fonction de renvoie/rappel vers le code de la bannière ?
mercredi 25 novembre 2009 à 18:53:14 | Re : Fonction system("clr"); et return;

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Bah tu réappel ta fonction, c'est tout !

Code C/C++ :
void banniere(void)
{
  printf("** Bannière **\n");
  printf("du texte \n");
  printf("du texte \n");
  printf("du texte \n");
}

int main(void)
{
  banniere();
  system("cls);

  banniere();
  banniere();

  return 0;
}


J'irais même plus loin et je ferais une fonction rafraichir:

Code C/C++ :
void banniere(void)
{
  printf("** Bannière **\n");
  printf("du texte \n");
  printf("du texte \n");
  printf("du texte \n");
}

void refresh(void)
{
  system("cls);

  banniere();
}

int main(void)
{
  refresh();
  refresh();

  return 0;
}
jeudi 26 novembre 2009 à 13:33:46 | Re : Fonction system("clr"); et return;

BabyAzerty

Omg !

Super, c'est exactement ce que j'essaie de comprendre depuis quelques jours : La création fd'une fonction ;)

Un grand merci !


Mais du coup j'ai une autre petite question :
J'ai délcaré cette fonction gotoligcol (que j'ai trouvé sur le web)
Jusqu'à la pas de problème, j'arrive à utiliser gotoligcol

Code C/C++ :
//Fonction de déplacement automatique sur une case du tableau
void gotoligcol(int lig,int col)
{
    COORD mycoord;

    mycoord.X  = col;
    mycoord.Y  = lig;

    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ),mycoord);
}


Mais ensuite, j'ai pensé à créer ma petite fonction "Nettoyeur"
Par exemple, si je souhaites effacer qu'une petite ligne (ou une petite zone), au lieu de faire un refresh(); je pensais qu'il était plus sage de faire une fonction speciale

Code C/C++ :
void Nettoyeur(int lig_depart, int lig_arrive, int col_depart, int col_arrive)
{
    for(lig_depart;lig_depart<=lig_arrive;lig_depart++)
    {
        for(col_depart;col_depart<=col_arrive;col_depart++)
        {
            gotoligcol(lig_depart,col_depart);
            puts(" ");
        }
    }
}


Concretement si je pose :
lig_depart = 4, lig_arrive = 20; col_depart = 0; col_arrive = 30;

La fonction Nettoyeur(); devrait m'éffacer (ou plutot afficher des " ") tout ce qu'il y a entre la ligne 4 à 20 et la colonne 0 à 30

Seul problème, ca ne marche pas ...

jeudi 26 novembre 2009 à 14:13:47 | Re : Fonction system("clr"); et return;

CptPingu

Administrateur CodeS-SourceS
C'est quelque chose de spécifique à Windows, ce n'est pas du vraiment du C.
Étant utilisateur de Linux, je ne peux malheureusement pas t'aider sur des API Windows.

Néanmoins, à ta place j'effacerais l'écran et à l'aide d'une fonction, réécrirais uniquement ce qui est nécessaire.
jeudi 26 novembre 2009 à 16:16:40 | Re : Fonction system("clr"); et return;

BabyAzerty

Ok donc il est préférable d'effacer tout puis réecrire ?

Je pensais que ca consommer plus de ressources.

Enfin, merci pour ton aide !
jeudi 26 novembre 2009 à 16:21:12 | Re : Fonction system("clr"); et return;

CptPingu

Administrateur CodeS-SourceS

Ok donc il est préférable d'effacer tout puis réecrire ?


Généralement, non.

Je pensais que ca consommer plus de ressources.


C'est sans doute le cas.

Je ne dis pas qu'il faut tout effacer, mais que:
- La solution portable (c'est à dire qui peut fonctionner sous tout OS) est de faire des choses standards, comme ne pas utiliser d'outils spécifiques à une plateforme, donc de ne pas utiliser de "SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE )". Et donc de tout effacer.
- Si tu te destines à Windows spécifiquement, dans ce cas, oui, il vaut mieux effacer uniquement un morceau de l'écran avec le morceau de code que tu m'as montré.
- Je ne connais pas les API Windows, donc je ne peux t'aider sur ce point.


Cette discussion est classée dans : fonction, system, return, niveau, clr


Répondre à ce message

Sujets en rapport avec ce message

scanf() [ par clb ] bonjour à tous,j'ecris par exemple :int fonction(){ if(true) return 0; else return -1}dans main, si cette fonction retourne 0,alors j'appli 2 return d'une fonction [ par Silver360 ] Hello tout le monde!Je voulais savoir s'il est possible qu'une fonction retourne 2 paramètres ( dans le genre int int mafonction() ) ou si je dois fai Fonction return dans une console windows [ par Jolfulorc ] Bonjour,Lorsque j'affiche un texte dans une console windows (code du genre : coutla façon que j'ai trouvé pour contourner cet inconvénient fonction system() [ par casper_2 ] Bonjour,jaimerais savoir comment pourrai-je avoir tous les fonctionnaliter de la focntion system(). Moi je connais ke ceci:system("pause"),system("cl rediriger le retour d'une fonction ?! [ par kod32 ] Salut,je souhaiterais dans mon programme (en C) stocker le résultat de la fonction system() dans un buffer.Malheureusement j'ai constaté que la foncti Rectification : en fait mon probleme porte sur la reconnaissance de chaine [ par Ciol ] Voila j ai vu et lu en diagonale les messages postés par Xs sur la reconnaissance de chaines et il semble bien ke ce dont j'ai besoin se touve ds cett commande system(); en C [ par shadow1779 ] Bonjour, je viens de me procurer Visual Studio 2003, car j'avai plein de probleme avec dev c++, et quand je test le moindre programme comme celui ci c probleme dans une ecriture de fichier [ par hisoka56 ] bon salut a tous, j'ai un petit probleme d'ecriture dans un fichier dans uen fonction qui permet de sauvegarder un niveau voila le fichier de niveaux Probleme fonction [ par largo118 ] Bonjours a tous je voudrait savoir comment il faut faire pour ouvrir un fichier .exe dont l'adresse contient un espace.Je vous montre mon probleme : J Problème avec la fonction system() [ par bouba ] Bonjour, dans un programme de dois lancer d'autres exécutables. J'ai utilisé la fonction system() pour réaliser l'exécution des ces progs. Ca marche m


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales