Chaine de caractère
Résolu
geophy
Messages postés
119
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, à toute la communauté CCM
j'ai un tout petit , soucis.
je programme en c sous code::blocks
je voulai savoir quel est la fonction en C qui permet de lire une chaine de caractère qui contient des espaces.
en fait j'ai ecris une fonction(ci dessous) qui demande à l'utilisateur entrez une phrase
ceci n'est q'une partie de mon programme
je constate que dès que je tape par exemple "ville de paris" , mon fichier n'a que le mot ville
quel fonction utilisé pour que la chaine de caractère(contenant des espaces) entrez par l'utilisateur soit totalement enrégistré sur mon fichier
j'ai essayé la fonctions gets , elle aussi ne marche pas
merci d'avance et happy new year 2011 @ TOUS
void chiffrerfichier(int a,int b,char *nom1)
{ FILE *fichier1 ;
char texte[50] ;
printf("entrez votre phrase :") ;
scanf("%19s",texte) ;
fichier1 = fopen("clair.txt","w+") ;
fprintf(fichier1,"%s",texte) ;
printf("\nla position du pointeur : %d\n", ftell(fichier1)) ;
rewind(fichier1) ;
fgets(texte,50,fichier1) ;
fclose(fichier1) ;
}
j'ai un tout petit , soucis.
je programme en c sous code::blocks
je voulai savoir quel est la fonction en C qui permet de lire une chaine de caractère qui contient des espaces.
en fait j'ai ecris une fonction(ci dessous) qui demande à l'utilisateur entrez une phrase
ceci n'est q'une partie de mon programme
je constate que dès que je tape par exemple "ville de paris" , mon fichier n'a que le mot ville
quel fonction utilisé pour que la chaine de caractère(contenant des espaces) entrez par l'utilisateur soit totalement enrégistré sur mon fichier
j'ai essayé la fonctions gets , elle aussi ne marche pas
merci d'avance et happy new year 2011 @ TOUS
void chiffrerfichier(int a,int b,char *nom1)
{ FILE *fichier1 ;
char texte[50] ;
printf("entrez votre phrase :") ;
scanf("%19s",texte) ;
fichier1 = fopen("clair.txt","w+") ;
fprintf(fichier1,"%s",texte) ;
printf("\nla position du pointeur : %d\n", ftell(fichier1)) ;
rewind(fichier1) ;
fgets(texte,50,fichier1) ;
fclose(fichier1) ;
}
A voir également:
- Chaine de caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
2 réponses
Bonjour,
Tu peux utiliser scanf, fgets, ...
Le plus simple est d'utiliser la fonction fgets.
Par exemple : fgets(texte, sizeof texte, stdin);
Ceci dit attention, fgets stockera aussi le '\n'.
Cdlt,
Google is your friend
Tu peux utiliser scanf, fgets, ...
Le plus simple est d'utiliser la fonction fgets.
Par exemple : fgets(texte, sizeof texte, stdin);
Ceci dit attention, fgets stockera aussi le '\n'.
Cdlt,
Google is your friend
void videBuf() { int c; while( (c=getchar())!='\n' && c != EOF ); } void chiffrer_fichier(int a,int b,char *nom1,char *nom2) { FILE *fichier1 ; FILE *fichier2 ; char texte[100] ; char lettre , lettre1 ; int nombre , nombre1 ; printf("entrez votre phrase :\t") ; videBuf(); scanf("%s",texte) ; fichier1 = fopen("clair.txt","w+") ; fichier2 = fopen("chiffre.txt","w+") ; fprintf(fichier1,"%s",texte) ; rewind(fichier1) ; fgets(texte,100,fichier1) ; rewind(fichier1) ; do { nombre = fgetc(fichier1) ; lettre = nombre ; lettre1 = chiffrer_lettre(a,b,lettre) ; nombre1 = lettre1 ; fputc(nombre1,fichier2) ;} while (nombre != EOF) ; fclose(fichier1) ; rewind(fichier2) ; fgets(texte,100,fichier2) ; printf("\ntexte chiffre: %s\n",texte) ; fclose(fichier2) ; }
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
slt
merçi pour ta fonction viderbuf
mais j'ai un souci , quel fonction utilisez dans ma fonction chiffrer_fichier
pour la lecture d'une chaine de caractère saisi par l'utilisateur sachant que cette chaine de caractère contient des espaces ?
moi j'ai essayé fgets et gets dans la fonction chiffrer_fichier et toujours rien
cdlt
merçi pour ta fonction viderbuf
mais j'ai un souci , quel fonction utilisez dans ma fonction chiffrer_fichier
pour la lecture d'une chaine de caractère saisi par l'utilisateur sachant que cette chaine de caractère contient des espaces ?
moi j'ai essayé fgets et gets dans la fonction chiffrer_fichier et toujours rien
cdlt
Tu pouvais la trouver tout seul la fonction viderBuf. Il a juste fait un copier coller de ce que je t'avais mis dans le code ;-))). D'ailleurs c'est ce que je t'avais conseillé de faire.
Et pour faire plus propre : remplace ta fonction saisir_cle par :
Et si ça ne marche toujours pas, dis-nous ce qui se passe plutôt que de dire ça marche pas. Est-ce le fgets qui saute silencieusement, ou autre...
Et pour faire plus propre : remplace ta fonction saisir_cle par :
void saisir_cle(int *x , int *y) { int a , b ; printf("entrez la valeur de b :\t") ; scanf("%d" , y) ; viderBuf(); b = *y ; do { do { printf("entrez la valeur de a :\t") ; scanf("%d" , x) ; viderBuf(); a = *x ;} while((a<=0) || (a>26)) ; } while(cle_valide(a,b) != 1) ; }
Et si ça ne marche toujours pas, dis-nous ce qui se passe plutôt que de dire ça marche pas. Est-ce le fgets qui saute silencieusement, ou autre...
même la fonction fgets ne marche pas .
le programme ignore completement de l'executer.
j'ai essayé scanf , mais le problème avec cette la fonction il s'arrète lorsqu'il rencontre le caractère espace .
c'est un devoir école , où on demande d'ecrire un programme qui fait du chiffrement affine , mais en se servant des fichiers.
donc j'ai ecri une fonction qui chiffre un message ,mais le problème est que qu'il ne marche qu'avec une chaine de caractère qui ne contient pas d'espace , je t'envoie un bout du code
void chiffrer_fichier(int a,int b,char *nom1,char *nom2)
{ FILE *fichier1 ;
FILE *fichier2 ;
char texte[100] ;
char lettre , lettre1 ;
int nombre , nombre1 ;
printf("entrez votre phrase :\t") ;
scanf("%s",texte) ; ----------------------------------
fichier1 = fopen("clair.txt","w+") ;
fichier2 = fopen("chiffre.txt","w+") ;
fprintf(fichier1,"%s",texte) ;
rewind(fichier1) ;
fgets(texte,100,fichier1) ;
rewind(fichier1) ;
do {
nombre = fgetc(fichier1) ;
lettre = nombre ;
lettre1 = chiffrer_lettre(a,b,lettre) ;
nombre1 = lettre1 ;
fputc(nombre1,fichier2) ;}
while (nombre != EOF) ;
fclose(fichier1) ;
rewind(fichier2) ;
fgets(texte,100,fichier2) ;
printf("\ntexte chiffre: %s\n",texte) ;
fclose(fichier2) ;
}
comment faire pour que se programme puisse gérer le caractère espaces.
C'est qu'il y a un problème en amont.
j'ai essayé scanf , mais le problème avec cette la fonction il s'arrète lorsqu'il rencontre le caractère espace .
Ca marche très bien avec scanf. scanf ne se résume pas à "%s" ou "%19s"... fgets est bien plus simple d'utilisation.
Je n'ai pas tout ton programme donc je ne suis pas sûr de ce que je vais avancer. Mais je verrai bien une erreur classique qui consiste à ne pas vider le buffer clavier...
Par exemple, essaie de mettre un simple getchar() juste avant le fgets.
Cela devrait résoudre le problème. Mais le plus propre serait de bien penser à vider le buffer clavier avant de lire une nouvelle chaîne.
Cdlt,
Sinon pour vider le buffer :
Je te conseille de faire une fonction et d'y greffer ce code pour plus de clarté.
Cdlt,