C - problème chaine espaces

Résolu/Fermé
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 - 25 nov. 2011 à 17:29
 Utilisateur anonyme - 28 nov. 2011 à 20:38
Bonjour, J'ai un petit soucis avec un mon code...mon programme doit demander à l'utilisateur de tapper une phrase, et de la mettre dans un fichier...tant qu'il a pas appuyé sur la touche "entrer", l'utilisateur peut taper ce qu'il veut (phrase avec espaces entre autre...) mais mon problème c'est que tout fonctionne sauf que ma phrase n'est pas pris en compte complètement... il s'arrête au 1er espace trouvé ...

Voici mon code mais ça ne fonctionne pas j'arrive juste à prendre le 1er mot que je tappe au clavier... dès que je tappe un espace il s'arrête là.... comment faire pour récupérer ma phrase entière avec des espaces et autres caractères svp ... ?

#include <stdio.h>

int main(char argc, char *argv[]){
char nom[20]; // mon tableau de caractère pour le fichier que je vais créer.
char phrase[100]; // mon tableau de caractères pour la phrase que je vais rentrer au clavier

// int taille = sizeof(phrase)/sizeof(phrase[0]);

//création de mon fichier
FILE *fichier;
printf("nom du fichier ? \n");
scanf("%s", nom);
fichier=fopen(nom,"w");


//on demande à l'utilisateur de rentrer une phrase.
printf("Entrez une phrase \n");

scanf("%s", phrase);

//affiche ma phrase
printf("phrase : %s \n", phrase); // il ne m'affiche que le 1er mot que je rentre et s'arrette au premier espace trouvé.

//mettre ma phrase dans mon fichier créé auparavant.
fprintf(fichier,"%s\n",phrase);


}


6 réponses

Salut,

c'est normal, pour la fonction scanf l'espace est un separateur donc tu ne peux recuperer que des mots, utilise la fonction fgets

fgets(phrase,100,stdin);



c'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillant avant d'avoir l'air k.on !
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
25 nov. 2011 à 18:46
j'ai remplacer scanf("%s", phrase); par fgets(phrase,100,stdin); mais maintenant il me propose plus de taper quelque chose au clavier ... le programme coupe directement
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
26 nov. 2011 à 14:11
il fallait en mettre 2
0
oups! j'ai oublié te te dire, le scanf précedent laisse trainer un '\n' dans le
buffer, il faut donc le vider sinon c'est fgets qui le récupére et tu as l'impression qu'il ne marche pas, d'où le 2eme appel nécessaire.

place getchar() juste avant fgets, c'est plus propre que 2 fgets (:-)


c'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillant avant d'avoir l'air k.on !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
28 nov. 2011 à 20:20
thanks ça marche maintenant ;)

pour ceux qui veulent le code..

#include <stdio.h>

int main(char argc, char *argv[]){
char nom[20],phrase[100];
FILE *fichier;
printf("nom du fichier ? \n");
scanf("%s", nom);
fichier=fopen(nom,"w");

printf("Entrez une phrase \n");

getchar();
fgets(phrase,100,stdin);
printf("phrase : %s", phrase);
fprintf(fichier,"%s\n",phrase);

}
0
(:-)
0
(:-)

c'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillant avant d'avoir l'air k.on !
0