[RESOLU] Quel fonction, comme scanf, prend en charge les espaces ?
Dernière réponse : dans Programmation
Bonjour à tous !
Dans un programme quand on met un scanf pour une chaine de caractère, dès qu'on met un espace, le mot qui suivra sera affecté à la variable qui suit !
C'est arrangeant quelque fois mais c'est enrageant des fois aussi !!!
Dans mon programme, je demande l'adresse de l'utilisateur et une adresse, sa peut prendre 3, 4, 5... mots !
Donc il me faudrait une fonction comme scanf qui prend en compte les espace dans la même chaine de caractères.
Vous pouvez me la donnée ?
(svp, expliquez-moi comment on s'en sert également)
Dans un programme quand on met un scanf pour une chaine de caractère, dès qu'on met un espace, le mot qui suivra sera affecté à la variable qui suit !
C'est arrangeant quelque fois mais c'est enrageant des fois aussi !!!
Dans mon programme, je demande l'adresse de l'utilisateur et une adresse, sa peut prendre 3, 4, 5... mots !
Donc il me faudrait une fonction comme scanf qui prend en compte les espace dans la même chaine de caractères.
Vous pouvez me la donnée ?
(svp, expliquez-moi comment on s'en sert également)
Autres pages sur : resolu fonction scanf prend charge espaces
Lassé par la pub ? Créez un compte
gets() est dépréciée, utilise fgets()
explications et exemples ici : http://mapage.noos.fr/emdel/notes.htm#saisie
explications et exemples ici : http://mapage.noos.fr/emdel/notes.htm#saisie
J'ai essayé et ça marche pas !
le programme ne s'arrete pas pour que l'utilisateur entre quelque chose.
Quelqu'un peut me donner un exemple complet,
avec un tableau de type char de taille 200 nommé "adresse" ?
Ah oui j'oubliais !
J'aimerais une fonction qui écrit dans un fichier, avec un exemple.
s'il vous plait ! :-D
le programme ne s'arrete pas pour que l'utilisateur entre quelque chose.
Quelqu'un peut me donner un exemple complet,
avec un tableau de type char de taille 200 nommé "adresse" ?
Ah oui j'oubliais !
J'aimerais une fonction qui écrit dans un fichier, avec un exemple.
s'il vous plait ! :-D
Euh c'est pas compliqué de chercher un petit peu mais bon comme je suis gentil :
Pour écrire dans les fichiers renseigne toi sur la structure FILE ainsi que les fonction fopen, fwrite et fseek
#include <stdio.h>
#include <stdlib.h>
#define TAILLEMAX 200;
int main(void)
{
char maChaine[TAILLEMAX];
printf("Entrez une donnee\n");
fgets(maChaine,TAILLEMAX,stdin);
printf("Vous avez saisi: %s\n",maChaine);
getchar();
return 0;
}
Pour écrire dans les fichiers renseigne toi sur la structure FILE ainsi que les fonction fopen, fwrite et fseek
char nom[100], prenom[100], adresse[200],codePostal[100], Ville[100];
system("CLS");
printf(" (I) Entrez votre nom en majuscule, puis votre prenom :\n"
" Exemple : DUPOND George\n"
" Votre nom et votre prenom : ");
scanf("%s %s", &nom, &prenom);
printf("\n (I) Entrez votre numero de rue et son nom :\n"
" Exemple : 3 rue des oiseaux\n"
" Votre rue : \n");
fgets(adresse,200,stdin);
printf("\n (I) Entrez votre code postal suivi de votre ville :\n"
" Exemple : 75000 Paris\n"
" Votre code postal et votre ville : ");
scanf("%s %s", &codePostal, &Ville);
Hum dans ton cas une structure serait plus appropriée :
Mais si tu ne connais pas encore les structures, un petit truc: lorsque tu utilises %s dans scanf ne met pas de &
scanft("%s",chaine);
car chaine est un pointeur en fait
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nom[100];
char prenom[200];
char adresse[200];
char codePostal[200];
char ville[200];
} infoPersonne ;
int main(void)
{
infoPersonne infos;
printf("Entrez votre nom en MAJUSCULE\n");
fgets(infos.nom,200,stdin);
printf("Entre votre prenom\n");
fgets(infos.prenom,200,stdin);
printf("Entrez votre adresse\n");
fgets(infos.adresse,200,stdin);
printf("Entrez votre code postal\n");
fgets(infos.codePostal,200,stdin);
printf("Entrez votre ville\n");
fgets(infos.ville,200,stdin);
getchar();
return 0;
}
Mais si tu ne connais pas encore les structures, un petit truc: lorsque tu utilises %s dans scanf ne met pas de &
scanft("%s",chaine);
car chaine est un pointeur en fait
stdin c'est un flux qui reçoit ce que tu entre au clavier.
Il te sert donc de tampon, où tu garde ces entrées avant de les utiliser.
Ce qui peut arriver, c'est que après un scanf ou autre, un '\n' est entré dans le tampon par l'utilisatuer (quand il appuie sur entrée), et donc au scanf suivant, il est utilisé et le programme passe a la suite des instructions.
(Bon c'est un peu confus tout ca et je te garantis pas l'absence d'erreurs, si tu veux en savoir plus cherche su google...)
@bluedylc:
lol, t'énerve pas hein... C'est pas mon mix hein, je vois son code, je lui propose une solution... Apres il en fait ce qu'il veut :-D
Euh sinon pour ton truc, toi tu as testé si ca marche? Je sais qu'il existe une méthode similaire en bash, mais je savais pas que ca existait en C... C'est toujours interessant d'avoir d'autres méthodes :-)
Il te sert donc de tampon, où tu garde ces entrées avant de les utiliser.
Ce qui peut arriver, c'est que après un scanf ou autre, un '\n' est entré dans le tampon par l'utilisatuer (quand il appuie sur entrée), et donc au scanf suivant, il est utilisé et le programme passe a la suite des instructions.
(Bon c'est un peu confus tout ca et je te garantis pas l'absence d'erreurs, si tu veux en savoir plus cherche su google...)
@bluedylc:
Citation :
Bah c'est bizarre. Il a un problème, je donne une solution, et toi tu proposes un mix infame de fgets et de scanf, bourré de flush, sans regarder ce que les autres proposent.lol, t'énerve pas hein... C'est pas mon mix hein, je vois son code, je lui propose une solution... Apres il en fait ce qu'il veut :-D
Euh sinon pour ton truc, toi tu as testé si ca marche? Je sais qu'il existe une méthode similaire en bash, mais je savais pas que ca existait en C... C'est toujours interessant d'avoir d'autres méthodes :-)
Bon... A ce qu'il parait, faudrait en théorie pas utiliser scanf non plus... parce que c'est pas propre et que ca laisse des trucs dans stdin.
Tu peux faire un getchar(); pour consommer le caractère. Mais c'est toujours pas propre.
...
Sinon, pour fflush(stdin); il semblerait que le comportement de vider stdin ne soit pas standard (apres une recherche sur google :-) ), mais que cette fonctionnalité ait été implémentée sur certains (la plupart?) des compilateurs.
A cette adresse: http://c-faq.com/stdio/gets_flush2.html
tu trouvera plus d'informations, et ils conseillent d'abandonner scanf ou de l'utiliser seul... Enfin bref...
Tout ca c'est pour si tu veux programmer "proprement" :-D
Si t'en a rien a faire (mais tu t'en préoccupe, hein?tu veux pas travailler pour Microsoft j'espère...), tu peux passer plus ou moins outre (je te le conseille pas lol)
@Tebonb:Merci, tu m'a apris un truc interessant :-D
Tu peux faire un getchar(); pour consommer le caractère. Mais c'est toujours pas propre.
...
Sinon, pour fflush(stdin); il semblerait que le comportement de vider stdin ne soit pas standard (apres une recherche sur google :-) ), mais que cette fonctionnalité ait été implémentée sur certains (la plupart?) des compilateurs.
A cette adresse: http://c-faq.com/stdio/gets_flush2.html
tu trouvera plus d'informations, et ils conseillent d'abandonner scanf ou de l'utiliser seul... Enfin bref...
Tout ca c'est pour si tu veux programmer "proprement" :-D
Si t'en a rien a faire (mais tu t'en préoccupe, hein?tu veux pas travailler pour Microsoft j'espère...), tu peux passer plus ou moins outre (je te le conseille pas lol)
@Tebonb:Merci, tu m'a apris un truc interessant :-D
ok ok ok. :-D
Moi perso maintenant je met toujours un fflush(stdin); avant et apres chaque scanf ou fgets.
Comme ça, stdin est censé être vidé, non ?
Depuis que vous m'avez appris à me servir de fgets, je l'utilise pour toutes mes saisies de chaines de caratères par l'utilisateur et j'utlise scanf pour les nombre.
Mon programme est censé être propre là, non ? :-?
A Rakipu : Non, je ne travaillerais JAMAIS pour MS !!! :nono:
MS
an:
Moi perso maintenant je met toujours un fflush(stdin); avant et apres chaque scanf ou fgets.
Comme ça, stdin est censé être vidé, non ?
Depuis que vous m'avez appris à me servir de fgets, je l'utilise pour toutes mes saisies de chaines de caratères par l'utilisateur et j'utlise scanf pour les nombre.
Mon programme est censé être propre là, non ? :-?
A Rakipu : Non, je ne travaillerais JAMAIS pour MS !!! :nono:
MS
an: Citation :
Mon programme est censé être propre là, non ? Ben en fait, le problème c'est l'instruction fflush(stdin);
Sur un compilateur qui respecterait juste la norme du C, fflsuh(stdin); possède un "comportement indéfini" donc ca ne marcherait pas...
Donc le code n'est pas complètement "portable", et ca, c'est pas "propre"...
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :