Votre question

Programmation C (débutant) - 2 question dont une très très bizarre ...

Tags :
  • Apprendre a programmer
  • Programmation
Dernière réponse : dans Programmation
16 Juillet 2010 23:28:46

Bonjour !
Je débute dans la programmation en C et j'ai deux questions qui m'intriguent, j'espère que vous pourrez m'aider !


  • Premièrement (ça devrait aller très vite), je suis en train de m'exercer à créer des minis programmes console et j'en viens à me poser la question suivante: comment, en C, faire l'équivalent des commandes de type "echo", "cls", "pause", etc. qu'on utilise lorsqu'on programme en MS-DOS (je veux dire en passant par le bloc note et en renommant celui-ci en .bat) ??

    J'ai cru comprendre qu'il suffisait de faire, par exemple pour la commande pause:

    1. system("pause");

    Et pour une autre commande, remplacer pause par la commande souhaitée.

    Est-ce bien cela ?
    Est-ce une bonne idée de procéder comme ça ou bien est-ce déconseillé et il est préférable de ne coder que en C par exemple ?

  • Et deuxièmement, c'est là que les romains s'empoignèrent, j'ai eu affaire à quelque chose de très bizarre :heink: 
    Je voudrais que ma console s'affiche en plein écran. Je me suis renseigné sur Google et ça à l'air d'être toute une histoire. Je suis tombée sur plusieurs solutions comme
    celle-ci http://www.cppfrance.com/forum/sujet-PLEIN-ECRAN-MODE-C...
    celle-ci http://cboard.cprogramming.com/cplusplus-programming/49...
    ou encore celle-ci http://www.cppfrance.com/codes/CONSOLE-PLEIN-ECRAN_2897...
    mais aucune ne me convenait car la console n'était pas bien centrèe, ou bien alors la barre bleue au dessus (titre de la fenêtre) apparraisait (autrement dit ce n'était pas un vrai plein écran mais une console agrandie). Et en plus, le texte, lui, n'était pas agrandi, or c'est ce que je voulais.

    Bref, ce n'était pas ce que je cherchais et je me suis souvenu d'un petit programme (avec une console .bat) que j'avais téléchargé il y a bien longtemps et qui se mettait en plein écran parfaitement comme je le voulais. Je l'ai donc retrouvé sur mon ancien disque dur et ai trouvé ceci:


    - un fichier "fullscreen" sans extension et dont je ne comprends donc pas le fonctionnement (fichier joint à la fin du message)

    - et la commande suivante dans le fichier .bat :
    1. debug<FullScreen

    Je ne comprends déjà pas bien d'où vient ce debug mais bon, le plus étrange reste à venir...



    Pour essayer de comprendre, j'ai créé un fichier .bat que voici:
    1. @echo off
    2. debug<FullScreen
    3. echo bizarre
    4. pause


    et ...... voici ce que ça m'a affiché sous XP, en mode plein écran comme je le voulais :heink:  :heink:  :heink:  :??:  :??:  :??:  :??:  :??: 

    1. bizarre ale programme
    2. Appuyez sur une touche pour continuer ...

    D'où vient ce ale programme ???? :pt1cable: 


    Et ce n'est pas tout ! Voici le message qui s'est affiché dans une fenêtre lorsque j'ai essayé ça sur mon ordi portable équipé de VISTA:



    Apparement, ils ont décidé d'encore un peu plus compliquer les choses avec vista :cry:  :fou: 


    Moi je comprends plus rien je crois que je deviens fou en tout cas ça m'énerve :pt1cable:  :pt1cable:  ! Je crois que je vais vite aller dormir !! :pt1cable:  :pt1cable:  :pt1cable: 



    J'exagère, mais ...
    Des explications, par pitié !

    :bounce: 
    :bounce: 
    :bounce: 




    Merci d'avance :)  :) 









    Le fichier "fullscreen" --> http://localhostr.com/files/ebe17d/FullScreen.
  • Autres pages sur : programmation debutant question tres tres bizarre

    17 Juillet 2010 00:23:38

    Bonjour,
    Pour ton premièrement : effectivement tu peux utiliser la primitive system mais c'est une très mauvaise façon de programmer ^^
    Je te conseil de regarder le site du zero pour apprendre a programmer en C, c'est le mieux je pense pour commencer.

    Pour te donner rapidement des base voila :
    Tu utilise un logiciel pour coder en C et qui le compilera, parmis eux je te conseil Code::Blocks qui est gratuit et très bien fait.
    Commence par faire des programmes simple pour commencer, donc oublis le plein écran c'est inutile pour commencer a programmer :) 
    Voila la base d'un programme :

    int main(int argc, char *argv[])
    {
    //Ton code

    return 0;
    }

    Apres pour faire ton "echo" par exemple en C ca donne :
    printf("TON TEXTE");

    Voila, c'est vraiment la base, après va voir le site du zero pour commencer ca me semble plus sage.
    Au passage bon courage pour les pointeurs c'est très chiant ^^ :D 

    Bon courage, @+
    m
    0
    l
    17 Juillet 2010 00:26:16

    Bonjour mexson,

    Dans la mesure du possible il faut éviter d'utiliser la fonction system() car c'est une fonction qui utilise beaucoup de ressources pour quelque chose que tu peux souvent faire simplement avec des bibliothèques existantes.
    En plus la plus part du temps ton code devient non-portable. Même si pour le moment tu fais du développement Windows, c'est une bonne habitude que de produire directement du code portable.

  • Pour echo, tu peux utiliser la fonction printf()
  • Pour pause tu peux utiliser getchar()
  • Pour cls rien de portable à ma connaissance, mais tu peux utiliser clrsrc() de conio.h

    Pour ta question sur le plein écran, franchement laisse tomber. Je sais que c'est tentant au début, mais si tu fais une application console c'est pour ne pas avoir à te soucier de l'affichage. Apprends d'abord à bien développer en C et après tu pourras te concentrer sur les bibliothèques graphiques pour disposer les fenêtres ;) 

    Edit: Bon grillé, mais ça te fais deux réponses :D 
    m
    0
    l
    17 Juillet 2010 03:52:50

    DivX_666 a dit :
    Bonjour,
    Pour ton premièrement : effectivement tu peux utiliser la primitive system mais c'est une très mauvaise façon de programmer ^^
    Je te conseil de regarder le site du zero pour apprendre a programmer en C, c'est le mieux je pense pour commencer.

    Pour te donner rapidement des base voila :
    Tu utilise un logiciel pour coder en C et qui le compilera, parmis eux je te conseil Code::Blocks qui est gratuit et très bien fait.
    Commence par faire des programmes simple pour commencer, donc oublis le plein écran c'est inutile pour commencer a programmer :) 
    Voila la base d'un programme :

    int main(int argc, char *argv[])
    {
    //Ton code

    return 0;
    }

    Apres pour faire ton "echo" par exemple en C ca donne :
    printf("TON TEXTE");

    Voila, c'est vraiment la base, après va voir le site du zero pour commencer ca me semble plus sage.
    Au passage bon courage pour les pointeurs c'est très chiant ^^ :D 

    Bon courage, @+


    Salut ! Merci pour ta réponse !
    Hé bien oui en fait je suis déjà en train de suivre le tutoriel du site du zéro qui est d'ailleurs extrêmement bien fait !
    Et j'utilise aussi Code::Blocks, où j'ai déjà fait quelques codes donc je commence à connaitre la structure (j'ai déjà des toutes petites bases) ;) 
    Mais ce qui est important pour moi et que je n'ai pas (encore ?) trouvé dans le tuto, c'est le "echo" (que je remplace déjà par "printf"), le "pause" (d'après Edyr c'est "getchar()") et le "cls" (clrsrc() de conio.h toujours d'après Edyr). Donc OK c'est bien ce qui me semblait alors: c'est mieux d'essayer de passer directement par du C :) 


    Tiens, j'ai d'ailleurs une question: est-ce que si à la place d'utiliser "cls" je fais "\n\n\n\n\n\n\n\n\n\n...", le programme risque-t-il de devenir plus lourd ?

    Et dans le même ordre d'idée, pour faciliter la lecture du code, surtout dans les menus console, j'ai tendance à faire comme ça:
    1. printf("Option 1");
    2. printf("Option 2");
    3. printf("Option 3");
    4. printf("Option 4");

    A la place de faire:
    1. printf("Option 1\nOption 2\nOption 3\nOption 4");


    Est-ce que ça alourdit mon programme ou juste mon code ?


    Pour ce qui est du mode plein écran, je sais bien que c'est un détail et que l'important ici n'est pas l'esthétique mais bien le code, seulement je suis en train d'essayer de coder un petit programme pour un ami (c'est une sorte de petit défi à moi même pour me motiver on va dire ^^ ) et ce programme devrait impérativement être en mode plein écran, c'est pour ça que je m'arrache tant les cheveux ...

    En tout cas merci, si tu as une idée ... :) 

    Edyr a dit :
    Bonjour mexson,

    Dans la mesure du possible il faut éviter d'utiliser la fonction system() car c'est une fonction qui utilise beaucoup de ressources pour quelque chose que tu peux souvent faire simplement avec des bibliothèques existantes.
    En plus la plus part du temps ton code devient non-portable. Même si pour le moment tu fais du développement Windows, c'est une bonne habitude que de produire directement du code portable.

  • Pour echo, tu peux utiliser la fonction printf()
  • Pour pause tu peux utiliser getchar()
  • Pour cls rien de portable à ma connaissance, mais tu peux utiliser clrsrc() de conio.h

    Pour ta question sur le plein écran, franchement laisse tomber. Je sais que c'est tentant au début, mais si tu fais une application console c'est pour ne pas avoir à te soucier de l'affichage. Apprends d'abord à bien développer en C et après tu pourras te concentrer sur les bibliothèques graphiques pour disposer les fenêtres ;) 

    Edit: Bon grillé, mais ça te fais deux réponses :D 


  • Merci aussi pour ta réponse !
    Pas grand chose à ajouter à ca que j'ai dit à DivX_666, sinon merci pour les 3 trois commandes que tu m'as dites et que je vais tester tout de suite :) 
    Et tu ne connaitrais pas la commande pour changer le titre de la console ? Genre l'équivalent de ... "system("titre");" [:patch]






    Merci d'avance pour mes nouvelles questions :-)
    m
    0
    l
    17 Juillet 2010 04:34:45

    Edit Edyr: Problème avec les commandes que tu m'as données ...
    "getchar();" --> Il faut taper un touche, mais elle s'affiche, et puis il faut encore appuyer sue ENTER ! Ce n'est pas vraiment l'équivalent du pause !
    En plus, il fait planter le scanf suivant je ne sais pas pourquoi !
    "clrsrc();" --> Là je reçois 1 error et 1 warning:

    C: /xxx/Programme de test 1/main.c:29: warning: implicit declaration of function `clrsrc'
    C: /xxx/Programme de test 1/main.c:29: undefined reference to `_clrsrc'


    :/  Qu'est-ce qui se passe ? merci :) 
    m
    0
    l
    17 Juillet 2010 11:06:36

    Oui getchar() ça fonctionne que si tu appuies sur Entrée ( même sans touche avant ), peut être que getch() correspond plus à ce que tu attends ?

    L'erreur que tu as c'est certainement que tu as oublié le #include <conio.h> dans ton fichier source :) 
    m
    0
    l
    a b L Programmation
    17 Juillet 2010 19:19:28

    Cette fonction (ainsi que les positionnement curseurs, couleurs, bref tout ce qui est dépendant de l'OS) ne fait plus partie d'aucun conio.h maintenant. De nos jours, on utilise les fenêtres. ;) 
    En ce qui concerne l'erreur de fullscreen Vista ou 7, on ne peut plus faire du plein écran par un changement de mode en assembleur (interruption BIOS 10h fonction 00h).
    debug.exe permet d'exécuter du code assembleur ou langage machine x86. J'imagine que c'est pour lancer l'interruption que j'ai indiquée. Je déconseille fortement d'exécuter un batch faisant appel à DEBUG si l'on ne sait pas ce que ça fait exactement, car il pourrait y avoir du code qui fasse autre chose.
    m
    0
    l
    17 Juillet 2010 20:48:13

    Edyr a dit :
    Oui getchar() ça fonctionne que si tu appuies sur Entrée ( même sans touche avant ), peut être que getch() correspond plus à ce que tu attends ?


    Oui oui ça c'est parfait merci !

    CRicky a dit :
    Cette fonction (ainsi que les positionnement curseurs, couleurs, bref tout ce qui est dépendant de l'OS) ne fait plus partie d'aucun conio.h maintenant. De nos jours, on utilise les fenêtres. ;) 
    En ce qui concerne l'erreur de fullscreen Vista ou 7, on ne peut plus faire du plein écran par un changement de mode en assembleur (interruption BIOS 10h fonction 00h).
    debug.exe permet d'exécuter du code assembleur ou langage machine x86. J'imagine que c'est pour lancer l'interruption que j'ai indiquée. Je déconseille fortement d'exécuter un batch faisant appel à DEBUG si l'on ne sait pas ce que ça fait exactement, car il pourrait y avoir du code qui fasse autre chose.


    Ça m'attriste vraiment car ce programme aurait besoin d'être en mode plein écran ...
    Dans mes recherches, je suis tombé sur le code suivant:
    1. system("mode con LINES=100 COLS=120");
    2.  
    3. HWND hWnd;
    4. SetConsoleTitle("test");
    5. hWnd = FindWindow(NULL, "test");
    6. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    7. COORD NewSBSize = GetLargestConsoleWindowSize(hOut);
    8. SMALL_RECT DisplayArea = {0, 0, 0, 0};
    9.  
    10. SetConsoleScreenBufferSize(hOut, NewSBSize);
    11.  
    12. DisplayArea.Right = NewSBSize.X - 1;
    13. DisplayArea.Bottom = NewSBSize.Y - 1;
    14.  
    15. SetConsoleWindowInfo(hOut, TRUE, &DisplayArea);
    16.  
    17. ShowWindow(hWnd, SW_MAXIMIZE);


    Seulement, pour commencer: il utilise windows.h qui, je l'imagine, en tout logique n'est compatible qu'avec Windows;
    En plus, il n'agrandit pas les caractères, mais bon ça c'est moins grave;
    Mais surtout, la fenêtre à tendance à ne pas se centrer convenablement, donc elle se redimensionne correctement mais le coin supérieur gauche est au milieu de l'écran par exemple :/ 


    J'ai très bien compris que l'important à mon stade n'était pas là, et je suis en train de m'entrainer à programmer en C le reste du programme, mais sans cet élément mon programme n'a plus de sens ...


    Merci d'avance pour vos futurs conseils, et aussi merci pour toutes vos réponses précédentes ! :) 
    m
    0
    l
    a b L Programmation
    18 Juillet 2010 21:34:21

    De toutes façons, avec la fonction system, ce n'est pas portable. En plus la console est trop dépendante de l'OS.
    Pour la fenetre, tu modifier Right et Bottom, mais pas Left ni Top.

    Tu peux utiliser une API (portable) pour gérer tout ce qui est affichage (come libSDL, gtk...) en oubliant la console :p  .
    m
    0
    l
    23 Juillet 2010 02:14:42

    Ok tant pis merci quand même à vous tous :) 

    Juste une question: "la console est trop dépendante de l'OS", ça veut dire que c'est absolument mieux d'utiliser les fenêtre ? Je croyais que la console était une outil puissant :??: 

    :) 
    m
    0
    l
    a b L Programmation
    17 Août 2010 22:16:38

    La console est puissante (enfin surtout celle des Unix/Linux), car on accède aux fonctionnalités de l'OS. Ceci implique que la console est proche et dépendante de l'OS.
    D'un point de vue ergonomique, la console n'est pas une bonne chose, mais l'ergonomie limite toujours les fonctionnalités. C'est pour quoi, les interfaces d'affichage des OS limitent au maximum l'utilisation de la console mais ne l'empêchent pas.
    m
    0
    l
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS