Le langage C - Exercices

Résolu
Mido1798 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
Mido1798 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux réaliser un exercice mais je ne sais pas comment m'y prendre. Il faut créer un programme en langage C permettant à l'utilisateur de saisir 5 noms ne comportant pas de caractères blancs puis les afficher à la fin tous les noms saisis. Si à la fin un des noms saisi comporte le mot "fin" le programme s'arrête, sinon le programme doit continuer tant que l'utilisateur n'a pas tapé le mot fin.

Quelqu'un pourrait m'aider?

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Et en quoi pouvons-nous t'aider ? Que connais-tu en C ?
    Qu'as-tu commencé à faire ? Qu'est-ce qui te bloque ?

    Cdlt,
    0
  2. Mido1798 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
     
    On m'a dit de créer une boucle principale, une chaîne de caractère et un tableau à double dimensions. C'est ce double dimensions qui me bloque. On m'a dit qu'il me servirait à enregistrer les chaînes que saisit l'utilisateur.

    Voilà mon problème.

    Merci de m'aider.
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Le tableau à 2 dimensions peut s'implémenter ainsi :
      char tableau[5][255];
      ainsi tableau[0], tableau[1], ..., tableau[5] sont 5 chaînes de 255 caractères (incluant le '\0' final). Il te suffit de faire une boucle for sur ces tableaux.
      0
    2. Mido1798 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Voici mon code non fonctionel
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include "main.h"
      
      int main(void)
      {
          char nom[100], enregistrer[5][100];
          int continuer = 1,  i = 0, j = 0;
          while(continuer)
          {
              for(i = 0; i < 5; i++)
              {
                  printf("Saisissez un  nom : ");
                  lire(nom, 100);
                  strcpy(nom, enregistrer[i]);
              }
      
              for(j = 0; j < 5; j++)
              {
                  if(strcmp(enregistrer[j], "fin") != 0)
                  {
                      puts(enregistrer[j]);
                  }
                  else
                  {
                      continuer = 0;
                  }
              }
      
      
      
          }
      }
      
      int lire (char *chaine, int longueur)
      {
          char *positionEntree = NULL;
      
          if(fgets(chaine, longueur, stdin) != NULL)
          {
              positionEntree = strchr(chaine, '\n');
              if(positionEntree != NULL)
              {
                  *positionEntree = '\0';
              }
              else
              {
                  viderBuffer();
              }
              return 1;
          }
      
          else
          {
              viderBuffer();
              return 0;
          }
      }
      
      void viderBuffer(void)
      {
          int c = 0;
      
          while(c != '\n' && c != EOF)
          {
              c = getchar();
          }
      }
      
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ah, ça fait plaisir de voire des jolis codes avec une indentation :-).
      Tu as juste oublié un : return 0; dans le main() (même si non obligatoire en C99).

      Et l'erreur qui casse tout : strcpy(nom, enregistrer[i]); Tu as inversé enregistrer[i] et nom. C'est strcpy(dest, src). Sinon, plutôt qu'utiliser strcpy, utilise plutôt strncpy par sécurité.

      Et enfin pour information, tu n'es pas obligé d'utiliser une variable temporaire (nom). Tu peux directement faire : lire(enregistrer[i],100); et encore mieux : lire(enregistrer[i], sizeof enregistrer[i]) comme ça, si tu modifies la taille du tableau, tout le reste suit :-).
      0
    4. Mido1798 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Pour le sizeof enregister[i] je préfère ne pas le mettre parce que mon but c'est de réaliser l'exercice, et c'est ce que je viens de faire. La faute était dans strcpy, merci ;) et merci pour tes compliments sur l'indentation de mon code lol.

      Par curiosité, à quoi sert strncpy ? Je ne connais pas cette fonction
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Les compliments ce n'était pas uniquement sur l'indentation, mais aussi sur le code lui-même (chose plus compliquée que l'indentation).

      strncpy, c'est la fonction "secure" de strcpy. Cela permet de spécifier la taille pour éviter des débordements.
      0