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 - Modifié le 17 févr. 2023 à 13:34
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

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

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.

1

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;
}
1
theo_dt04 Messages postés 2 Date d'inscription vendredi 10 février 2023 Statut Membre Dernière intervention 10 février 2023 1
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 !

1