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

Fermé
bernard - 13 févr. 2010 à 17:29
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 13 févr. 2010 à 19:36
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
13 févr. 2010 à 18:45
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
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
13 févr. 2010 à 19:35
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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661 > bernard
13 févr. 2010 à 19:36
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