Scanf marche et pas fgets
Résolu
rocksider
Messages postés
106
Date d'inscription
Statut
Membre
Dernière intervention
-
rocksider Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
rocksider Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
dernierement on m'a conseillé de travailler avec fgets à la place de scanf pour + de securité, mais malheuresement il marche pas dans des fcts que j'ai créé comme par exemple là :
void chgpass()
{
char pass[15],pass1[15],pass2[15];
printf("Donner votre ancien mot de passe:");
//fgets(pass,sizeof(pass),stdin);
scanf("%s",&pass);
fflush(stdin);
if(!strcmp(user[actif].pass,pass))
{ ...}
else
{...}
donc quand je travaille avec scanf, ça entre dans la condition, et avec fgets il me renvoi tjr dans le else ...
est ce que je devrai abondonné fgets même si il est meilleur ? l'erreur peu provenir de quoi?
dernierement on m'a conseillé de travailler avec fgets à la place de scanf pour + de securité, mais malheuresement il marche pas dans des fcts que j'ai créé comme par exemple là :
void chgpass()
{
char pass[15],pass1[15],pass2[15];
printf("Donner votre ancien mot de passe:");
//fgets(pass,sizeof(pass),stdin);
scanf("%s",&pass);
fflush(stdin);
if(!strcmp(user[actif].pass,pass))
{ ...}
else
{...}
donc quand je travaille avec scanf, ça entre dans la condition, et avec fgets il me renvoi tjr dans le else ...
est ce que je devrai abondonné fgets même si il est meilleur ? l'erreur peu provenir de quoi?
A voir également:
- Scanf marche et pas fgets
- Scanf java ✓ - Forum C
- Scanf windows - Guide
- Scanf segmentation fault ✓ - Forum Programmation
- "Scanf(&s,&n)" ✓ - Forum C
- C++ popen /fgets ✓ - Forum C++
9 réponses
Salut,
Plusieurs erreurs dans ton code.
scanf("%s",&pass); Il faut enlever l'esperluette (&).
Ensuite, le fgets marche très bien, mais il ne faut pas oublier que le '\n' va se loger dans la chaîne aussi s'il y a de la place.
Et enfin, il ne faut pas utiliser fflush(stdin). Cela ne marche pas forcément.. Il vaut mieux vider le buffer à coup de fgetc.
Cdlt
Plusieurs erreurs dans ton code.
scanf("%s",&pass); Il faut enlever l'esperluette (&).
Ensuite, le fgets marche très bien, mais il ne faut pas oublier que le '\n' va se loger dans la chaîne aussi s'il y a de la place.
Et enfin, il ne faut pas utiliser fflush(stdin). Cela ne marche pas forcément.. Il vaut mieux vider le buffer à coup de fgetc.
Cdlt
pour l'esperluette c fait je l'ai enlevé, pour l'espace i reste toujours, ça voudrai toujours dire qui y'aurai le '\n' apres le pseudo?
sinon pour le fflush(stdin), j'ai beau chercher à un truc meilleur,d'ailleurs j'avait trouvé le fameux fgetc, mais j'ai pas bien saisis
sinon pour le fflush(stdin), j'ai beau chercher à un truc meilleur,d'ailleurs j'avait trouvé le fameux fgetc, mais j'ai pas bien saisis
Si tu utilises fgets, et que tu veux enlever le '\n' tu utilises, strchr pour avoir un pointeur sur le \n et le transformer en \0.
Et pour le fflush(stdin), utilise plutôt
Cdlt
Et pour le fflush(stdin), utilise plutôt
int c; while((c=fgetc())!='\n' && c!=EOF);
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci je vais continué avec les fgets alors, et svp (dsl pour le derangement dejà) vous pouvez m'expliquer ce que fait cette boucle ? EOF c'est quoi?
while((c=fgetc())!='\n' && c!=EOF);
while((c=fgetc())!='\n' && c!=EOF);
l'interruption Ctrl+D ? dsl ...
mercii pour m'avoir eclairci le truc ^^, sinon apres changer les fflush par la ligne que vous m'avez passé il me donne 1 erreur. j'utilise dev-c++ , j code avec du c.
Two few arguments to function fgetc.
et puis j'ai pas su utilisé strchr ...
Two few arguments to function fgetc.
et puis j'ai pas su utilisé strchr ...