Printf et scanf, ça compile bien mais...?

Bonjour, j'ai réalisé un programme qui compile très bien mais à l'éxécution ça foire. Il s'agit juste de saisir des valeurs au clavier et de les recopier dans un enregistrement:

#include <stdio.h>

struct scooter {
int identification;
char *modele;
int kilometrage;
};

void afficherScooter(struct scooter s){
printf("Scooter numéro %d, Modele %s, %d km,", s.identification, s.modele, s.kilometrage);
}

void saisirScooter(struct scooter *ps){
printf("Saisissez le numéro d'identification du scooter: ");
scanf("%d\n", &ps->identification);
printf("Saisissez le modele de votre scooter: ");
scanf("%s\n", ps->modele);
printf("Sasissez le kilometrage de votre scooter: ");
scanf("%d\n", &ps->kilometrage);
}

int main(){
struct scooter s, *ps;
ps=&s;
saisirScooter(&s);
afficherScooter(s);
return 0;
}

Quand je tape ma première valeur et que je fais entrer, le second printf ne se lance pas, sauriez vous pq?

merci
Configuration: Linux
Mozilla 1.9.0.16

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut,
    Pas de \n dans tes scanf et ça ira beaucoup mieux ;-))).
    De plus attention à l'utilisation des scanf(%s,...) vaut mieux utiliser une fonction sécurisée comme fgets ou alors de bien spécifier la taille maximum.
    Par ailleurs n'oublie pas de bien vider le flux explicitement si tu ne souhaites pas sauter de ligne avant la fin du programme avec fflush(stdout).

    Cdlt,
    1. merci fiddy, oui tu as tout à fait raison car malgré que là mon programme marche il donne tjs une erreur de segmentation, mais en gardant scanf comment spécifier la taille maximum du champ modele?
    2. @bernardc'est bon j'ai trouvé en définissant modele comme un tableau de taille maximale, merci bcp ça ira :)
    3. @bernardtu obtiens une erreur de segmentation car tu n'as pas alloué de mémoire pour ta chaine de caractère (char * ).

      Utilise malloc pour cela, ou alors déclares simplement ta chaine ainsi :

      char modele[100]