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

bernard -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
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

1 réponse

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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,
0
bernard
 
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?
0
bernard > bernard
 
c'est bon j'ai trouvé en définissant modele comme un tableau de taille maximale, merci bcp ça ira :)
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > bernard
 
tu 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]
0