Après scanf(), c'est le néant
Résolu/Fermétheo_dt04 Messages postés 2 Date d'inscription vendredi 10 février 2023 Statut Membre Dernière intervention 10 février 2023 - 10 févr. 2023 à 20:53
- Après scanf(), c'est le néant
- Alex, dont la mère est née à pau, s'est créé un compte de messagerie alex@pxmail.fr. il a oublié le mot de passe qu’il a choisi. aidez-le à le retrouver. - Télécharger - Antivirus & Antimalwares
- Alex - Forum Gmail
- Scanf java - Forum Java
- Scanf windows - Guide
- Scanf en java pour les tableaux ✓ - Forum Java
3 réponses
Deux choses, on n'a pas besoin du & quand on lit une chaîne en format %s.
Ensuite, le format %s s'arrête au premier espace.
Tu pourrais essayer le format %[^\n] qui veut dire tout sauf la fin de ligne.
J'ai regardé trop vite, tu appelles tes fonctions avec [i] et tu mets le [i] dans les paramètres
En fait, tu ne crées et n'affiches qu'un livre à la fois.
Enlève les indices dans les fonctions.
J'ai eu l'idée de faire un copier-coller de ton code.
Il y a plus d'erreurs que je pensais. Pas surprenant que ça plantait.
je te donne la version corrigée:
#include <stdio.h> typedef struct Livre Livre; struct Livre { int annee; char titre[100]; char auteur[100]; // il faut un ; ici }; void afficherLivre(Livre livre) { printf("=================\n"); printf("Titre %s\n", livre.titre); printf("Auteur %s\n", livre.auteur); printf("Annee %d\n", livre.annee); printf("=================\n"); } void creerLivres(Livre *livre){ // Il faut passer un pointeur pour remplir la bonne structure, et non une copie. printf("entrez l'annee de publication de votre livre \n"); scanf("%d",&livre->annee); printf("entrez le titre de votre livre \n"); scanf(" %[^\n]",livre->titre); // Les espaces au début sont pour faire sauter la fin de ligne. printf("entrez le nom de l'auteur de votre livre \n"); scanf(" %[^\n]",livre->auteur); } int bibliotheque; // Je l'ai laisssé mais ça n'est pas une bonne idée d'avoir des variables globales. void tailleBibliotheque(){ printf("combien de livre contient votre biblioteque ?\n"); scanf("%d", &bibliotheque); } int main() { Livre livre[1000]; // Tu n'avais pas le bon type. tailleBibliotheque(); for (int i = 0; i < bibliotheque; i++){ creerLivres(&livre[i]); // Ici, je donne le pointeur. } for (int i = 0; i < bibliotheque; i++){ afficherLivre(livre[i]); } return 0; }
Modifié le 17 févr. 2023 à 13:34
Merci beaucoup !!
j'en attendais pas autant c'est super gentil.
Je me disait bien qu'il me manquais quelque chose ! je n'avais pas encore appris a me servir des pointeurs mais je vais me pencher dessus.
Bonne soirée et merci encore !