IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

ca veut pas s'executer aidez moi svp :d


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut ca veut pas s'executer aidez moi svp :d
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
     //type adresse
     typedef struct adresse
      {
              int numrue;
              char nomrue[41];
              char ville[16];
      }adresse;
       //type etudiant
      typedef struct etudiant{
              char nom[26];
              char prenom[21];
              char filiere[4];
              adresse adr;
              }
             etudiant;
      //saisie
     int saisie(etudiant T[MAX])
    {
         int ch;
     int i=0;
     do{
     printf("donner le nom");
     scanf("%s",&T[i].nom);
     printf("prenom");
     scanf("%s",&T[i].prenom);
     printf("la filiére sm ou smi");
     scanf("%s",&T[i].filiere);
     printf("le numero de la rue ");
     scanf("%d",&T[i].adr.numrue);
     printf("le nom de la rue");
     scanf("%s",&T[i].adr.nomrue);
     printf("la ville");
     scanf ("%s",&T[i].adr.ville);
     i++;
     printf("si vs voulez continuez appuyez sur 1 sinn sur 0");
     scanf("%d",&ch);
     }while(ch!=0);
     return i;
     }       
     //affichage
     void affichage(etudiant T[MAX],int n)
     {
       int i;
       for (i=0;i<n;i++) 
       {   
       printf("donner le nom:%s\n",T[i].nom);
       printf("prenom:%s\n",T[i].prenom);
       printf("la filiére sm ou smi:%s\n",T[i].filiere);
       printf("le numero de la rue:%d\n",T[i].adr.numrue);
       printf("le nom de la rue:%s\n",T[i].adr.nomrue);
       printf("la ville:%s",T[i].adr.ville);
     }
    }
     //permuter deux etudiants
     void echange_etud(etudiant *e1,etudiant *e2)
     {
     etudiant temp;
     temp=*e1;
     *e1=*e2;
     *e2=temp;
     }
      //tri par nom  d'une liste d'etudiants 
     void trinom(etudiant T[MAX],int debut,int fin)
     {
     int i,j,min;
      for (i=debut;i<fin-1;i++)
      {
         min=i;
         for(j=i+1;j<fin;j++)
         {
           if (strcmp(T[j].nom,T[min].nom)<0)
            {
              min=j;
              echange_etud(&T[i],&T[min]);
            }
         }   
      }      
     }
       //tri par ville d'une liste d'etudiant
    void triville(etudiant T[MAX],int debut,int fin)
    {
     int i,j,min;
     for (i=debut;i<fin-1;i++)
     {
       min=i;
       for(j=i+1;j<fin;j++)
       {
         if (strcmp(T[j].adr.ville,T[min].adr.ville)<0)
         {
          min=j;
          echange_etud(&T[i],&T[min]);
         }
       }
     }
    }     
    //tri par ville puis par nom d'une liste d'etudiants
       void triville_nom(etudiant T[MAX],int debut,int fin)
       {
       int i,j;
       int start,end;//debut et fin de la liste triée par ville
       int trouve;//egal a 1 si meme ville
       triville(T,debut,fin);
       i=debut;
       while(i<fin){
                     start=i;
                     end=i;
                     trouve=1;
                     for(j=i+1;j<=fin&&trouve;j++)
                     {
                      if (strcmp (T[j].adr.ville,T[i].adr.ville)==0)
                      {
                       end=j;
                      } 
                      else trouve=0;
                      if (start != end) 
                      {
                       trinom(T,start,end);
                       i=end+1;
                      }
                     }
                    }
      }                  
    int main(int argc, char *argv[])
    {
     //menu
        int n;
        char c;
        etudiant T[100];
        do{
                 printf("--------------------MENU------------------------");
                 printf ("\n1 lecture \n");  
                 printf ("2 affichage \n"); 
                 printf ("3 tri par nom \n"); 
                 printf ("4 tri par ville \n"); 
                 printf ("5 tri par ville puis par nom \n"); 
                 printf ("6 quitter \n") ;
                 printf("entrez votre choix:");
                 scanf("%c",c);
                 switch(c)
                 {
                          case '1' : n=saisie(T);break;
                          case '2' :affichage(T,n);break;
                          case '3' :trinom(T,0,n);break;
                          case '4' :triville(T,0,n);break;
                          case '5' :triville_nom(T,0,n);break;
                          case '6' :printf("merci \n");
                          default:printf("mauvaix choix");
                 }
        } while (c!='6');
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    voilà ce que me dit mon compilo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:27: warning: char format, different type arg (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:29: warning: char format, different type arg (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:31: warning: char format, different type arg (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:35: warning: char format, different type arg (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:37: warning: char format, different type arg (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:142: warning: format argument is not a pointer (arg 2)
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:130: warning: 'n' might be used uninitialized in this function
    F:\Documents and Settings\DonExhortae\Mes documents\forum\1\main.c:131: warning: 'c' might be used uninitialized in this function
    :: === Build finished: 0 errors, 8 warnings ===
    t'as la saisie d'un caractere sans &
    les chaine de caractere ont pas besoin d'adresse & (en effet le nom d'une variable chaine de caractere est équivalent à l'adresse du premier caractere de la chaine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    printf("donner le nom");
     scanf("%s",T[i].nom);
     printf("prenom");
     scanf("%s",T[i].prenom);
     printf("la filiére sm ou smi");
     scanf("%s",T[i].filiere);
     printf("le numero de la rue ");
     scanf("%d",&T[i].adr.numrue);
     printf("le nom de la rue");
     scanf("%s",T[i].adr.nomrue);
     printf("la ville");
     scanf ("%s",T[i].adr.ville);

    il manque un break; pour le case 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case '1' : n=saisie(T);break;
    case '2' :affichage(T,n);break;
    case '3' :trinom(T,0,n);break;
    case '4' :triville(T,0,n);break;
    case '5' :triville_nom(T,0,n);break;
    case '6' :printf("merci \n");break;
    ....
    utilise la balise code

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Mon compilateur à moi est beaucoup plus bavard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    /home/thierry/devel/test_f/main.c:5: erreur: syntax error before «/» token
    /home/thierry/devel/test_f/main.c:11: erreur: syntax error before «}» token
    /home/thierry/devel/test_f/main.c:11: attention : type defaults to «int» in declaration of «adresse»
    /home/thierry/devel/test_f/main.c:11: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:12: erreur: syntax error before «/» token
    /home/thierry/devel/test_f/main.c:17: erreur: syntax error before «adr»
    /home/thierry/devel/test_f/main.c:17: attention : type defaults to «int» in declaration of «adr»
    /home/thierry/devel/test_f/main.c:17: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:19: attention : type defaults to «int» in declaration of «etudiant»
    /home/thierry/devel/test_f/main.c:19: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:20: erreur: syntax error before «/» token
    /home/thierry/devel/test_f/main.c:25: erreur: syntax error before «do»
    /home/thierry/devel/test_f/main.c:27: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:27: attention : type defaults to «int» in declaration of «scanf»
    /home/thierry/devel/test_f/main.c:27: erreur: conflicting types for «scanf»
    /home/thierry/devel/test_f/main.c:27: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:27: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:28: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:28: attention : type defaults to «int» in declaration of «printf»
    /home/thierry/devel/test_f/main.c:28: erreur: conflicting types for «printf»
    /home/thierry/devel/test_f/main.c:28: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:28: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:29: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:29: attention : type defaults to «int» in declaration of «scanf»
    /home/thierry/devel/test_f/main.c:29: erreur: conflicting types for «scanf»
    /home/thierry/devel/test_f/main.c:29: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:29: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:30: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:30: attention : type defaults to «int» in declaration of «printf»
    /home/thierry/devel/test_f/main.c:30: erreur: conflicting types for «printf»
    /home/thierry/devel/test_f/main.c:30: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:30: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:31: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:31: attention : type defaults to «int» in declaration of «scanf»
    /home/thierry/devel/test_f/main.c:31: erreur: conflicting types for «scanf»
    /home/thierry/devel/test_f/main.c:31: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:31: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:32: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:32: attention : type defaults to «int» in declaration of «printf»
    /home/thierry/devel/test_f/main.c:32: erreur: conflicting types for «printf»
    /home/thierry/devel/test_f/main.c:32: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:32: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:33: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:33: attention : type defaults to «int» in declaration of «scanf»
    /home/thierry/devel/test_f/main.c:33: erreur: conflicting types for «scanf»
    /home/thierry/devel/test_f/main.c:33: note: a parameter list with an ellipsis can»t match an empty parameter name list declaration
    /home/thierry/devel/test_f/main.c:33: attention : la définition de données n'a pas de type ni de classe de stockage
    /home/thierry/devel/test_f/main.c:34: erreur: syntax error before string constant
    /home/thierry/devel/test_f/main.c:34: attention : type defaults to «int» in declaration of «printf»
    /home/thierry/devel/test_f/main.c:34: erreur: conflicting types for «printf»
    :: More errors follow but not being shown.
    :: Edit the max errors limit in compiler options...
    :: === Build finished: 50 errors, 0 warnings ===
    En particulier, la saisie de chaînes de caractères entrées par l'utilisateur à l'aide de scanf("%s", tampon) est particulièrement mal venue et pose de gros problèmes de sécurité (la loi de Murphy veut qu'il y ait une probabilité élevée d'utilisateurs qui entreront systématiquement un chaîne trop longue, quelle que soit la taille du tampon). scanf() est une fonction extrêmement complexe à utiliser. Il existe un excellent tutoriel sur ce site, mais il y a de fortes chances que la personne qui sera chargée de la maintenance de votre logiciel ne sera pas un gourou de scanf(). Je recommande donc d'utiliser fgets() avec la fonction clean_fgets() dont le code est donné si dessous.

    Je ne traite ici que les saisies utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct Etudient_
    {
        char nom[26];
        char prenom[21];
    } Etudient_s;
     
    static int clean_fgets(char const *s_buffer, FILE *fp);
     
    int main(void)
    {
        Etudient_s etud;
     
        printf("Entrez votre nom: ");
        fflush(stdout);
        fgets(etud.nom, sizeof etud.nom, stdin);
        if (clean_fgets(etud.nom, stdin) != 0)
        {
            fprintf(stderr, "WARNING: L'entrée est trop longue et a été tronquée!");
        }
     
        printf("Entrez votre prénom: ");
        fflush(stdout);
        fgets(etud.prenom, sizeof etud.prenom, stdin);
        if (clean_fgets(etud.prenom, stdin) != 0)
        {
            fprintf(stderr, "WARNING: L'entrée est trop longue et a été tronquée!");
        }
     
        return EXIT_SUCCESS;
    }
     
     
    /**
     * Teste si la ligne du fichier ou l'entrée utilisateur à partir du flux d'entrée
     * standard n'a pas été tronquée par fgets(). Si la saisie est incomplète, le
     * reste de la ligne (si on travail sur un fichier) est ignoré ou le tampon du
     * flux d'entrée standard (si on travail sur stdin) est purgé, et un code
     * d'erreur est retourné.
     *
     * Si la saisie est correcte, le caractère de nouvelle ligne '\n' placé dans
     * le tampon par fgets() et effacé.
     *
     * @param s_buffer tampon contenant la saisie de fgets()
     * @param fp pointeur sur le fichier considéré, ou sur le flux d'entrée standard
     * @return code d'erreur dont la veleur est 1 en cas de saisie tronquée, et 0
     *         en cas de saisie correcte
     */
    static int clean_fgets(char const *s_buffer, FILE *fp)
    {
        int err = 0; /* error code */
        char *pc = strchr(s_buffer,'\n');
     
        if (pc != NULL) /* input OK */
        {
            *pc = '\0';
        }
        else /* input has been truncated */
        {
            int c;
            while ((c = fgetc(fp)) != '\n' && c != EOF)
            {
                /* We ignore all the remaining characters */
                continue;
            }
            /* we report that an error has been encountered */
            err = 1;
        }
        return err;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mujigka
    .....
    En particulier, la saisie de chaînes de caractères entrées par l'utilisateur à l'aide de scanf("%s", tampon) est particulièrement mal venue ...
    Comme tu disais hier, ça semble vraiment être une mode tendance ce truc-là ...

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Comme tu disais hier, ça semble vraiment être une mode tendance ce truc-là ...
    C'est malheureusement le lot commun des profs de bases qui se recopient entre eux sans jamais se remettre en cause...

    J'aimerais bien former ces profs, mais n'ayant pas les diplômes requis ("plom !"), je n'ai aucune chance, et l'enseignement de base de l'informatique restera de ce pauvre niveau...

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    merci pour tout mais encore le meme probleme le menu s affiche mais quand je choisis saisie ou affichage ou.... ca block

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est malheureusement le lot commun des profs de bases qui se recopient entre eux sans jamais se remettre en cause...

    J'aimerais bien former ces profs, mais n'ayant pas les diplômes requis ("plom !"), je n'ai aucune chance, et l'enseignement de base de l'informatique restera de ce pauvre niveau...
    Et voilà ce qu'on peut lire sur certains sites destinés aux débutants:
    Vous pouvez enregistrer une chaîne rentrée par l'utilisateur via un scanf, en utilisant là encore le symbole %s.
    Seul problème : vous ne savez pas combien de caractères l'utilisateur va rentrer. Si vous lui demandez son prénom, il s'appelle peut-être Luc (3 caractères), mais qui vous dit qu'il ne s'appelle pas Jean-Edouard (beaucoup plus de caractères) ?

    Pour ça, il n'y a pas 36 solutions. Il va falloir créer un tableau de char très grand, suffisamment grand pour pouvoir stocker le prénom. On va donc créer un char[100] pour stocker le prénom. Ca donne l'impression de gâcher de la mémoire, mais souvenez-vous encore une fois que de la place en mémoire c'est pas ce qui manque (et y'a des programmes qui gâchent de la mémoire de manière bien pire que ça, si vous saviez )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(int argc, char *argv[])
    {
        char prenom[100];
     
        printf("Comment t'appelles-tu petit   ? ");
        scanf("%s", prenom);
        printf("Salut %s, je suis heureux de te rencontrer !", prenom);
     
        return 0;
    }
    L'utilisation de fgets() n'est enseigné que dans un tutoriel ad hoc.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Windows 8 ne demarre pas aidez moi svp
    Par 1abdou1 dans le forum Windows 8
    Réponses: 3
    Dernier message: 27/09/2014, 09h32
  2. Aidez moi svp , je ne suis pas fort en progra..
    Par foudsellak dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/09/2009, 20h37
  3. Erreur de variable, je comprends vraiement pas :( aidez moi svp.
    Par plex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 04/08/2006, 14h16
  4. Je vois pas d'où vient mon erreur!! Aidez moi SVP
    Par liliboms dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2005, 08h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo