Après scanf(), c'est le néant
Résolutheo_dt04 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je sui débutant en codage de C99, j'essaye de faire un petit programme qui permet à l'utilisateur de créer une bibliothèque avec des livres qu'il peut personnaliser.
Le problème c'est que après le scanf du début il ne se passe rien ! La question est posée, je rentre la valeur, j'appuie sur entré et il ne se passe rien.
J'ai essayé avec une taille de bibliothèque constante mais c'est le même problème avec tous les scanf de mon programme.
Merci beaucoup d'avance pour votre aide !
Je mets le programme en dessous pour être plus clair....
#include <stdio.h> typedef struct Livre Livre; struct Livre { int annee; char titre[100]; char auteur[100] }; int i; void afficherLivre(Livre livre[i]) { printf("=================\n"); printf("Titre %s\n", livre[i].titre); printf("Auteur %s\n", livre[i].auteur); printf("Annee %d\n", livre[i].annee); printf("=================\n"); } void creerLivres(Livre livre[i]){ printf("entrez l'annee de publication de votre livre \n"); scanf("%d",&livre[i].annee); printf("entrez le titre de votre livre \n"); scanf("%s",&livre[i].titre); printf("entrez le nom de l'auteur de votre livre \n"); scanf("%s",&livre[i].auteur); } int bibliotheque; void tailleBibliotheque(){ printf("combien de livre contient votre biblioteque ?\n"); scanf("%d", &bibliotheque); } int main() { int livre[1000]; tailleBibliotheque(); for (i = 0; i < 5; i++){ creerLivres(livre[i]); } for (i = 0; i < 5; i++){ afficherLivre(livre[i]); } return 0; }
Windows / Chrome 106.0.0.0
- 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. ✓ - Forum Mozilla Firefox
- REPONSE A ALEX - Forum Matériel & Système
- Scanf en java ✓ - Forum Programmation
- ALEX ✓ - Forum TV & Vidéo
- Doctor Alex Antispyware - Télécharger - Antivirus & Antimalwares
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; }