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
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
A voir également:
- Le langage C - Exercices
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Transmath 3eme corrigé exercices ✓ - Forum Loisirs / Divertissements
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
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,
Et en quoi pouvons-nous t'aider ? Que connais-tu en C ?
Qu'as-tu commencé à faire ? Qu'est-ce qui te bloque ?
Cdlt,
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
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.
Voilà mon problème.
Merci de m'aider.
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
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.
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.
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
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(); } }
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
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 :-).
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 :-).
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
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
Par curiosité, à quoi sert strncpy ? Je ne connais pas cette fonction
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
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.
strncpy, c'est la fonction "secure" de strcpy. Cela permet de spécifier la taille pour éviter des débordements.