Gestion de fichier et problème scanf (en C)

Fermé
Meyfarth - 13 déc. 2007 à 13:37
 le père - 13 déc. 2007 à 16:22
Bonjour,

J'ai un petit souci de programmation avec scanf. J'ai un projet à faire et je dois faire une "base de données" de location de voitures. le but est de gérer les structures, les pointeurs et les passages en paramètres. J'aurais donc deux questions :

1) Est-ce que quelqu'un connaît un cours bien expliqué sur le net concernant la gestion des fichiers, car j'ai beau cherché, aucun n'est satisfaisant à mon goût. Je vous laisse imaginer qu'il serait mieux d'avoir toutes mes données dans des fichiers, ça m'évite 5 minutes de saisie à chaque fois que je désire faire un test.

2) J'ai un souci avec scanf : les espaces. Je sais qu'il sépare les chaînes de caractère avec le caractère d'espacement, mais en essayant quelques méthodes trouvées sur le net, rien ne fonctionne.

Voici un bout de code :

Code de la structure client :
typedef struct client{
	long int id_client;
	char nom[MAX_NOM];
	char prenom[MAX_PRENOM];
	char CP[6];
	char date_naissance[10];
	char adresse[MAX_ADRESSE];
	char ville[MAX_VILLE];
	char n_permis[MAX_N_PERMIS];
}client;



Code pour ajouter un client :

void ajouter_client(client tab_client[],int *nb_client)
{ 
 tab_client[*nb_client].id_client = id_nouveau_client(tab_client,*nb_client);
 printf("\nNom : ");
 scanf("%s", tab_client[*nb_client].nom);
 printf("\nPrenom : ");
 scanf("%s", tab_client[*nb_client].prenom);
 printf("\nDate de naissance (sous forme jj/mm/aaaa) : ");
 scanf("%s", tab_client[*nb_client].date_naissance);
 printf("\nAdresse : ");
 scanf("%s", tab_client[*nb_client].adresse);
 printf("\nCode postal : ");
 scanf("%s", tab_client[*nb_client].CP);
 printf("\nVille : ");
 scanf("%s", tab_client[*nb_client].ville);
 printf("\nNum permis : ");
 scanf("%s", tab_client[*nb_client].n_permis);
 *nb_client = *nb_client + 1;
}


Ici, mon problème est le suivant : quand je tape une adresse "normale" avec environ 4 espaces, il me saute 4 scanf. Exemple : 14 le clos des bananes => Je suppose qu'il met 14 dans adresse, "le" dans code postal, "clos" dans ville, "des" dans numéro de permis et "bananes" dans le champ Nom. J'ai donc recherché comment faire pour qu'il considère toute la chaîne comme une seule chaîne et non plusieurs. J'ai trouvé :

scanf("%[^\n]",tab_client[*nb_client].nom); => Ne fonctionne pas, quand ça arrive au champ nom, il ne demande rien et passe directement au suivant
fgets(tab_client[*nb_client].prenom,100,stdin); => Idem

Avez-vous une solution qui fonctionne ? Merci :)
A voir également:

4 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
13 déc. 2007 à 14:44
0
Et concernant le scanf ? Quelqu'un a une idée pour régler ce problème on ne peut plus suspect ? :°
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
13 déc. 2007 à 16:16
peut-être reste-t-il des caractères, essayer un fflush(stdin) avant le premier scanf.
0
Bonjour

Quel problème suspect concernant scanf ? Qu'il coupe test saisies aux espaces ? C'est normal, scanf est fait pour ça.

utilise gets pour lire une ligne complète
0