Scanf marche et pas fgets
Résolu/Fermé
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
-
29 nov. 2008 à 21:26
rocksider Messages postés 106 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 16 mars 2012 - 1 déc. 2008 à 02:16
rocksider Messages postés 106 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 16 mars 2012 - 1 déc. 2008 à 02:16
A voir également:
- Scanf marche et pas fgets
- Scanf windows - Guide
- Scanf java ✓ - Forum Programmation
- Fgets php - Forum PHP
- Scanf getchar ✓ - Forum C
- Scanf equivalent in c++ - Forum C++
9 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
29 nov. 2008 à 21:32
29 nov. 2008 à 21:32
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
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
29 nov. 2008 à 21:37
29 nov. 2008 à 21:37
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
29 nov. 2008 à 21:41
29 nov. 2008 à 21:41
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
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
29 nov. 2008 à 21:51
29 nov. 2008 à 21:51
mercii pour ces précieux info, donc on scanf est plus pratique ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
29 nov. 2008 à 21:53
29 nov. 2008 à 21:53
scanf est assez dangereux en fait, surtout de la façon dont tu l'utilises.
Reprends ton programme avec ton scanf. Et rentre une longue chaîne de caractère. Et admire le résultat ;)
Cdlt
Reprends ton programme avec ton scanf. Et rentre une longue chaîne de caractère. Et admire le résultat ;)
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
29 nov. 2008 à 21:59
29 nov. 2008 à 21:59
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);
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
29 nov. 2008 à 22:00
29 nov. 2008 à 22:00
La boucle permet de lire tous les caractères dans le buffer clavier jusqu'au \n final ou l'interruption Ctrl+D ;)
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
29 nov. 2008 à 22:03
29 nov. 2008 à 22:03
l'interruption Ctrl+D ? dsl ...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
29 nov. 2008 à 22:12
29 nov. 2008 à 22:12
C'est pour mettre fin à la ligne directement avec une séquence d'échappement.
Mais, t'inquiète ce n'est pas important. ;)
EOF c'est End Of File. Donc tu le vois notamment en fin de fichiers (caractère final). Eh bien t'imagines que ce caractère vient dans le buffer (grosso modo).
Cdlt
Mais, t'inquiète ce n'est pas important. ;)
EOF c'est End Of File. Donc tu le vois notamment en fin de fichiers (caractère final). Eh bien t'imagines que ce caractère vient dans le buffer (grosso modo).
Cdlt
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
30 nov. 2008 à 00:31
30 nov. 2008 à 00:31
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 ...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
30 nov. 2008 à 11:32
30 nov. 2008 à 11:32
Ah oui, désolé, j'ai fait ça de tête. fgetc(stdin) ou alors getchar() ;)
Cdlt
char *p=strchr(chaine,'\n'); if(p!=NULL) *p='\0';
Cdlt
rocksider
Messages postés
106
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
16 mars 2012
9
1 déc. 2008 à 02:16
1 déc. 2008 à 02:16
merci beaucoup pour ces précieuse info, merci infiniment ^^