Le langage C - Exercices

Résolu/Fermé
Mido1798 Messages postés 21 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 23 août 2012 - 21 août 2012 à 22:52
Mido1798 Messages postés 21 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 23 août 2012 - 22 août 2012 à 22:45
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?
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 août 2012 à 23:33
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
Mido1798 Messages postés 21 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 23 août 2012
21 août 2012 à 23:39
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 août 2012 à 23:49
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
Mido1798 Messages postés 21 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 23 août 2012
22 août 2012 à 00:27
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 août 2012 à 20:22
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
Mido1798 Messages postés 21 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 23 août 2012
22 août 2012 à 22:10
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 août 2012 à 22:28
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