vous savez bien que lors de l'utilisation de la fonction "scanf("%s",&variable)"
si on donne un nom (prenom et nom) dont il separe un "space" scanf alors prend seulement le premier mot.
comment faire pour ne pas tomber dans ce probleme?
vous savez bien que lors de l'utilisation de la fonction "scanf("%s",&variable)"
si on donne un nom (prenom et nom) dont il separe un "space" scanf alors prend seulement le premier mot.
comment faire pour ne pas tomber dans ce probleme?
Non, car gets n'est pas securisé (contre le depassement). Preferer utiliser fgets, qui est comme gets mais securiser.
Bonjour,
Va voir plutôt sscanf, sauf que la il faut utiliser un buffer.
Mais la meilleure solution reste fgets.
Si c'est pour ton utilisation exclusive, tu peux utiliser gets. Tu sais ce qu'il faut faire et ce qu'il ne faut pas faire, donc tu n'est pas l'utilisateur lambda qui entrera n'importe quoi
Après il faut vraiment savoir ce que tu fais sinon tu feras comme l'utilisateur lambda![]()
ben le plus simple pour toi c de faire deux variables de lecture nom et prenom par exemple et de les faire lire par scanf en plus pour un usage dans ton programme c mieux de les avoir divisé mais bon c toi ki programme alors a toi le choix mais le fgets resout ton problem de lecture d'espace
"user" etant la variable dans laquelle je veux mettre la chaine de characteres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> #include <conio.h> void main() { File *g; char *user; int ID; g=fopen("USER.dta","w"); if(g!=NULL) { fgets(user,30,stdin); scanf("%d",&ID); fprintf("%s\t%d",user,ID); } fclose(g); }
"30" etant le nb max de caracteres pou la chaine
s'il vous plait me dire ou est le probleme?
Salut,
il faut d'abord réserver de l'espace pour ta chaine user soit tu fais:
ou alors tu alloues dynamiquement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part user [30];
Code : Sélectionner tout - Visualiser dans une fenêtre à part user = malloc( sizeof( char ) * 30 );
PS : attention, File et FILE sont différents, fprintf prend un paramètre de plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdio.h> int main(void) { /* on réserve un tableau de 30 caractères pour user */ char user[30]; int ID; /* remplissage de user*/ fgets(user, sizeof user, stdin); /* init de ID */ scanf("%d", &ID); printf("%s\t%d", user, ID); return 0; }
Et oui, fgets laisse le '\n' dans la chaine :Pour retirer le '\n' de la chaine, il suffit de le chercher et le remplacer :Envoyé par man fgets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 /* remplissage de user*/ fgets(user, sizeof user, stdin); { /* recherche du saut de ligne */ char *p = strchr(user, '\n'); if(NULL != p) { /* remplacement du saut de ligne par un fin de chaine */ *p = '\0'; } }
Partager