écrire un programme

Voir le sujet précédent Voir le sujet suivant Aller en bas

écrire un programme

Message  boislatasse le Mar 23 Mar 2010 - 18:56

bonjour,

voilà,
j'ai lu entièrement le tuto de base en c
je peux dire que je sais de quoi parle un pointeur , une structure, un tableau etc..
mais je voudrais écrire mon premier programme ( pas hello world lol):
un petit programme qui affiche en console un menu ex:
1) info reseau
2) info hard
exit

dans info reseau, un sous menu:
1) adresse ip/masque/gw
2).... etc...

mais je ne sais pas par où commencer.

le menu c'est simple
mais c'est pour écrire une fonction qui va m'afficher mon ip, masque etc... je ne sais pas par où commencer.

en fait je voulais me faire ce petit projet pour commencer à m'exercer. mais passer de la théorie à la pratique .....

Merci de vos conseils!

ciao

boislatasse

Messages : 6
Date d'inscription : 23/03/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: écrire un programme

Message  -ed- le Mer 24 Mar 2010 - 0:02

boislatasse a écrit:
j'ai lu entièrement le tuto de base en c
je peux dire que je sais de quoi parle un pointeur , une structure, un tableau etc..
mais je voudrais écrire mon premier programme ( pas hello world lol):
un petit programme qui affiche en console un menu ex:
1) info reseau
2) info hard
exit

dans info reseau, un sous menu:
1) adresse ip/masque/gw
2).... etc...

mais je ne sais pas par où commencer.

le menu c'est simple
mais c'est pour écrire une fonction qui va m'afficher mon ip, masque etc... je ne sais pas par où commencer.

en fait je voulais me faire ce petit projet pour commencer à m'exercer. mais passer de la théorie à la pratique .....
Comme indiqué ici :

http://www.bien-programmer.fr/dev_proj.htm

Pour écrire un programme, la méthode est toujours la même. On commence par définir ce qu'on veut faire (1 - définition). Ensuite, on cherche les moyens de le réaliser (2 - conception), puis on le réalise (3 - codage et tests unitaires), on assemble les morceaux (4 - intégration) et on vérifie le comportement (5 -validation).

La partie la plus difficile, celle qui demande réflexion et recherche, est la conception.

Admettons que ta définition dise

"afficher l'IP de la machine".

La conception consiste à chercher les moyens de réaliser cette demande.

- rechercher l'IP
- afficher l'IP.

Pour l'affichage, c'est simple (printf() etc.).

Pour la recherche, c'est pas simple, car il n'y a pas de solution standard dans le langage C qui n'a pas de support réseau natif. Par contre, il existe des fonctions dites 'POSIX.1" généralement supportées par les systèmes modernes, notamment en matière de réseau. Il faut donc se renseigner sur les fonctions réseau POSIX.1, trouver celle qui permet de connaitre son IP et voir si son environnement de développement la supporte suffisamment pour être exploitable.

Comme indiqué ici :

http://www.bien-programmer.fr/notes.php#posix

la documentation POSIX.1 se trouve ici : http://www.unix.org/

Fait de ton mieux et poste ton code si tu as des difficultés.

Pour le 'hard', il va falloir être plus précis, car on entre dans des domaines, par définition, pas du tout standard (le C ne connait rien de la machine sur laquelle il travaille, c'est le but...)

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: écrire un programme

Message  boislatasse le Mer 24 Mar 2010 - 12:22

bonjour,

merci de votre retour,
j'ai commencé par le menu mais j'ai un petit problème:
le menu s'affiche, je choisis l'option 1, je rentre dans le sous menu et je choisis 2 pour retourner dans le menu principale et quand je choisis 3, je ne peux plus sortir, pourtant quand je choisis 3 directement dans le menu principal, je sors bien.
voici le code:
Code:

#include <stdio.h>

void menu_network();
void menu_hardware();
void menu_principal();
void affiche_ip();

int main(void) {

// appel du menu principal
  menu_principal();

}

//##################
void menu_principal() {

        int choix;
        do {
                printf("\n");
                printf("************************************************\n");
                printf("              SYSTEM-SHOW                    \n");
                printf("************************************************\n\n");

                printf("Menu principal\n\n");
                printf("1. Sys Network \n");
                printf("2. Sys hardWare \n\n");
                printf("Faites votre choix (1 ou 2), sinon 3 pour quitter: ");
                scanf("%d",&choix);
                switch(choix){
                        case 1 :
                                menu_network();
                                break;
                        case 2 :
                                menu_hardware();
                                break;
                }

        }while (choix != 3);

}

//########################
//########################
void menu_network() {

int choix_net;
        while ( choix_net != 2 ){
        printf("\n");
        printf("************************************************\n");
        printf("            MENU-NETWORK                        \n");
        printf("************************************************\n\n");

        printf("Menu Network\n\n");
        printf("1. Afficher IP, Masque et Gw \n");
        printf("Faites votre choix (1), sinon 2 pour retourner au menu principal: ");
        scanf("%d",&choix_net);

        if ( choix_net == 1 )
                affiche_ip();    // fonction d'affichage ip à faire
        else
                menu_principal();
    }
}

//##########

void affiche_ip() {
        printf ("ici on va afficher ip masque et Gw \n");
}

//##############

void menu_hardware(){

printf("ici sera le menu hardware\n");
}


merci de votre aide.

boislatasse

Messages : 6
Date d'inscription : 23/03/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: écrire un programme

Message  -ed- le Mer 24 Mar 2010 - 13:25

boislatasse a écrit:bonjour,

merci de votre retour,
j'ai commencé par le menu mais j'ai un petit problème:
le menu s'affiche, je choisis l'option 1, je rentre dans le sous menu et je choisis 2 pour retourner dans le menu principale et quand je choisis 3, je ne peux plus sortir, pourtant quand je choisis 3 directement dans le menu principal, je sors bien.
Il y a déjà quelques problèmes à corriger dans ce code :

Code:

-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:4: warning: function declaration isn't a prototype
C:\dev\hello\main.c:5: warning: function declaration isn't a prototype
C:\dev\hello\main.c:6: warning: function declaration isn't a prototype
C:\dev\hello\main.c:7: warning: function declaration isn't a prototype
C:\dev\hello\main.c: In function `main':
C:\dev\hello\main.c:14: warning: control reaches end of non-void function
C:\dev\hello\main.c: At top level:
C:\dev\hello\main.c:17: warning: function declaration isn't a prototype
C:\dev\hello\main.c:46: warning: function declaration isn't a prototype
C:\dev\hello\main.c:69: warning: function declaration isn't a prototype
C:\dev\hello\main.c:75: warning: function declaration isn't a prototype
Output size is 20.69 KB
Process terminated with status 0 (0 minutes, 2 seconds)
0 errors, 9 warnings
Une réorganisation du code :
Code:


#include <stdio.h>

/* ########## */

void affiche_ip (void)
{
  printf ("ici on va afficher ip masque et Gw \n");
}

/* ######################## */
/* ######################## */
void menu_network (void)
{

  int choix_net;
  while (choix_net != 2)
  {
      printf ("\n");
      printf ("************************************************\n");
      printf ("            MENU-NETWORK                        \n");
      printf ("************************************************\n\n");

      printf ("Menu Network\n\n");
      printf ("1. Afficher IP, Masque et Gw \n");
      printf
        ("Faites votre choix (1), sinon 2 pour retourner au menu principal: ");
      scanf ("%d", &choix_net);

      if (choix_net == 1)
        affiche_ip ();        /* fonction d'affichage ip à faire */
      else
        menu_principal ();
  }
}

/* ############## */

void menu_hardware (void)
{

  printf ("ici sera le menu hardware\n");
}

/* ################## */
void menu_principal (void)
{

  int choix;
  do
  {
      printf ("\n");
      printf ("************************************************\n");
      printf ("              SYSTEM-SHOW                    \n");
      printf ("************************************************\n\n");

      printf ("Menu principal\n\n");
      printf ("1. Sys Network \n");
      printf ("2. Sys hardWare \n\n");
      printf ("Faites votre choix (1 ou 2), sinon 3 pour quitter: ");
      scanf ("%d", &choix);
      switch (choix)
      {
      case 1:
        menu_network ();
        break;
      case 2:
        menu_hardware ();
        break;
      }

  }
  while (choix != 3);

}

int main (void)
{

/* appel du menu principal */
  menu_principal ();
  return 0;
}
montre qu'il y a un appel récursif :
Code:


-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c: In function `menu_network':
C:\dev\hello\main.c:33: warning: implicit declaration of function `menu_principal'
C:\dev\hello\main.c: At top level:
C:\dev\hello\main.c:47: error: conflicting types for 'menu_principal'
C:\dev\hello\main.c:33: error: previous implicit declaration of 'menu_principal' was here
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 1 warnings
Ce qui est très probablement une erreur de conception. En effet, un menu est essentiellement 'bouclé' de manière itérative.

Il faudrait revoir ça avec de boucles sur ce principe :
Code:

fin := FAUX
FAIRE
  choix := LIRE
  SELON choix
  CAS A
      action_a()
  CAS B
      action_c()
  CAS C
      fin := VRAI
  FIN SELON
TANT QUE NON fin


Dernière édition par -ed- le Mer 24 Mar 2010 - 13:33, édité 1 fois

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: écrire un programme

Message  boislatasse le Mer 24 Mar 2010 - 13:30

bonjour,

je le compile sous linux avec gcc -o menu menu.c
j'ai pas de warning

root /Clangage # ./menu

************************************************
SYSTEM-SHOW
************************************************

Menu principal

1. Sys Network
2. Sys hardWare

Faites votre choix (1 ou 2), sinon 3 pour quitter: 1

************************************************
MENU-NETWORK
************************************************

Menu Network

1. Afficher IP, Masque et Gw

Faites votre choix (1), sinon 2 pour retourner au menu principal: 2

************************************************
SYSTEM-SHOW
************************************************

Menu principal

1. Sys Network
2. Sys hardWare

Faites votre choix (1 ou 2), sinon 3 pour quitter:

boislatasse

Messages : 6
Date d'inscription : 23/03/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: écrire un programme

Message  -ed- le Mer 24 Mar 2010 - 13:37

boislatasse a écrit:je le compile sous linux avec gcc -o menu menu.c
j'ai pas de warning
Oui, c'est insuffisant. J'indique ici

http://www.bien-programmer.fr/codage.php#cfg_compilo

comment bien configurer son compilateur (utiliser un script ou make pour ça).

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: écrire un programme

Message  boislatasse le Mer 24 Mar 2010 - 13:52

effectivement, y a pas mal d'erreur
gcc -Wall -W -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized menu menu.c => c trop bien je ne connaissais pas.

je corrige tout ça.

Merci

boislatasse

Messages : 6
Date d'inscription : 23/03/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: écrire un programme

Message  Contenu sponsorisé Aujourd'hui à 15:25


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum