Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
718 connectés 

  FORUM HardWare.fr
  Programmation
  C

  scanner un texte entier

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

scanner un texte entier

n°1066208
d'jo
Posté le 29-04-2005 à 19:46:19  profilanswer
 

voila le sujet en dit long j'aimerai scanner un text en entier afin de pouvoir le modifier . je pensais encadrer un scanf par une double boucle mais si quelqu un aurai une idée moins lourde je serai interessé  
merci encore

mood
Publicité
Posté le 29-04-2005 à 19:46:19  profilanswer
 

n°1066212
skelter
Posté le 29-04-2005 à 19:56:07  profilanswer
 
n°1066221
d'jo
Posté le 29-04-2005 à 20:07:50  profilanswer
 

scuse je me suis mal exprimé , en fait l'utilisteur tape une phrase par exemple et moi je veux la stocker comme un tableau ou chaque colonne est un mot    par exemple              
 
                j v b    
                e a i
                  i e
                  s n


Message édité par d'jo le 29-04-2005 à 20:10:30
n°1066235
Emmanuel D​elahaye
C is a sharp tool
Posté le 29-04-2005 à 20:26:55  profilanswer
 

d'jo a écrit :

scuse je me suis mal exprimé , en fait l'utilisteur tape une phrase par exemple et moi je veux la stocker comme un tableau ou chaque colonne est un mot    par exemple              


                j v b    
                e a i
                  i e
                  s n



C'est un peu tordu, non ? Quel est l'interêt ? (Je veux bien me fatiguer, mais pas pour rien...)
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1066605
blazkowicz
Posté le 30-04-2005 à 11:34:29  profilanswer
 

un scanf dans une simple boucle? :D

n°1066820
d'jo
Posté le 30-04-2005 à 14:36:55  profilanswer
 

lol c'est pour pouvoir jouer avec les lettres les echangées  
et pour le scanf dans une boucle ..... j'avoue que je ne voie pas ...ca va me scanner seulement le premier mot non ?

n°1066900
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 16:07:51  profilanswer
 

d'jo a écrit :

lol c'est pour pouvoir jouer avec les lettres les echangées  
et pour le scanf dans une boucle ..... j'avoue que je ne voie pas ...ca va me scanner seulement le premier mot non ?


Avec fgets(), tu lis ligne par ligne. Tu peux donc consituer facilement une collection de lignes (tableau de chaines, tableau de pointeurs sur chaine, liste chainée). Après si tu veux analyser les mots de chaque lignes libre à toi, mais l'organisation caractère par caractère en colonne, j'y crois pas.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1066914
d'jo
Posté le 30-04-2005 à 16:19:00  profilanswer
 

si par exemple je tape : "tu vas bien" et je veux transforer la phrase en décalant par exemple et printf renvoi :"nt uva sbie" c'est possible avec fgets ? car je ne vois pas comment acceder à chacune des lettres pour effectuer un algo quelquonque.

n°1066920
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 16:23:48  profilanswer
 

d'jo a écrit :

si par exemple je tape : "tu vas bien" et je veux transforer la phrase en décalant par exemple et printf renvoi :"nt uva sbie" c'est possible avec fgets ? car je ne vois pas comment acceder à chacune des lettres pour effectuer un algo quelquonque.


fgets ne fait que placer une ligne dans un tableau de char. Après tu fais ce que tu veux (tu sais accéder à chaque caractère, je rappelle qu'une chaine est un tableau de char terminé par un 0). Tu peux repérer un mot, demander d'inverser des caractères, décaler, (dans chaque cas, ecrire la fonction qui va bien) etc. Que veux tu faire exactement ? Le C n'est qu'un outil que l'on adapte aux besoins. Pas de besoin, pas d'outil.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1066938
d'jo
Posté le 30-04-2005 à 16:43:07  profilanswer
 

voila exactment je souhaite associer a chaque lettre une autre lettre ,sorte de codage,j'ai très bien réussi pour un mot , mais pour une phrase je n'y parviens pas.Avec une double boucle sur un scanf(%c) j'y arrive presque mais je trouve ça lourd et pas très malin de plus j'ai des segmentation fault

mood
Publicité
Posté le 30-04-2005 à 16:43:07  profilanswer
 

n°1066944
Elmoricq
Modérateur
Posté le 30-04-2005 à 16:48:43  profilanswer
 

d'jo a écrit :

voila exactment je souhaite associer a chaque lettre une autre lettre ,sorte de codage,j'ai très bien réussi pour un mot , mais pour une phrase je n'y parviens pas.


 
 :??:  
 
C'est exactement pareil pour un mot que pour une phrase.  
 
 

d'jo a écrit :

Avec une double boucle sur un scanf(%c) j'y arrive presque mais je trouve ça lourd et pas très malin de plus j'ai des segmentation fault


 
Pourquoi %c et pas %s ?
 
Et puis fgets c'est mieux que scanf je trouve (j'ai jamais aimé scanf, je trouve son comportement imprévisible dès que l'utilisateur entre n'importe quoi).
 
Tu stockes une chaîne entière dans un char*, que tu manipules ensuite.
 
Evite de mélange plusieurs tâches en même temps, ici "lecture de la chaîne" + "mise en forme".
Tronçonne les étapes jusqu'à avoir des tâches très simples, que tu exécutes ensuite une à une.
C'est beaucoup plus simple.

n°1066957
d'jo
Posté le 30-04-2005 à 17:09:57  profilanswer
 

Avec %s il me scan mot par mot alors qu'avec %c c'est chaque lettre , donc avec text[i][j] j'accede directement au caractere souhaité (theoriquement). Pour le fgets je veux bien m'y mettre mais avec seulement 4 séance de C j'ai encore du mal avec les allocation dynamique en rapport avec les char * d'autant je l'on ne connais pas au départ la taille du texte. peut tu me mettre un petit exemple d'équivalence avec le scanf


Message édité par d'jo le 30-04-2005 à 17:10:31
n°1066960
d'jo
Posté le 30-04-2005 à 17:11:32  profilanswer
 

Mon programme pour tester l'aquisition d'une phrase donne
 
#include <stdio.h>
 
 
int main()
{    
    int j,i;
    char phrase[5][5];
    printf("\nentrez une phrase\n" ) ;
for (i=0 ; i<5 ;i++ ){
    for (j=0 ; j<5 ;j++ ){scanf("%c",&phrase[i][j]);}
    }    
for (i=0 ; i<5 ;i++ ){    
    for (j=0 ; j<5 ;j++ ){printf("%c",phrase[i][j]);}
    }    
    printf("%c ",phrase[0][1]);
    return 0;
}

n°1066984
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 17:36:50  profilanswer
 

d'jo a écrit :

Mon programme pour tester l'aquisition d'une phrase donne


Comme tu dis c'est lourd! On t'as dit d'utiliser fgets(). Quelle est le mot que tu n'as pas compris ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1066996
d'jo
Posté le 30-04-2005 à 17:47:38  profilanswer
 

comment accederais-tu au "x" avec fgets si l'utilisateur entre: bienvenue aux invités?
 
Et comment utilise tu le fgets moi j'ai appris avec scanf et en regardant dans le man ... ça m'a pas tellement aidé

n°1067006
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 18:04:13  profilanswer
 

d'jo a écrit :

comment accederais-tu au "x" avec fgets si l'utilisateur entre: bienvenue aux invités?


On s'en f*** de fgets(). Une fois qu'on a une ligne, on accède à chaque caractère avec []. Tu les list les posts ou quoi ? On a pas déjà expliqué 3000 fois qu'une chaine de caractère était un tableau de char terminé par un 0 ? Tu ne sais pas acéder aux éléments d'un tableau ? C'est quoi ton livre de C ? Les pages sont collées ou quoi ?

Citation :

Et comment utilise tu le fgets moi j'ai appris avec scanf et en regardant dans le man ... ça m'a pas tellement aidé


Je ne t'ai pas déjà donné ces liens 3000 fois ?
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
Fait des essais, ça mort pas...


Message édité par Emmanuel Delahaye le 30-04-2005 à 18:08:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067009
d'jo
Posté le 30-04-2005 à 18:06:22  profilanswer
 

non je jete un coup d oeil merci quand meme

n°1067014
jercmoi
Posté le 30-04-2005 à 18:11:07  profilanswer
 

d'jo a écrit :

comment accederais-tu au "x" avec fgets si l'utilisateur entre: bienvenue aux invités?


 
Pour accéder au "x", moi je créerai une fonction annexe qui recherche un caractère :

Code :
  1. char* rechercher_caractere(char *phrase, char *caractere_recherche)
  2. {
  3.   char *p=phrase; // p est un pointeur que je fais pointer au départ sur le premier caractère de la phrase, puis que je fais progresser dans la phrase jusqu'à trouver le caractère recherché
  4.   while (*p!=caractere_recherche && *p!='\0') // la dernière condition teste la fin de chaine
  5.     p++;
  6.   return (*p==caractere_recherche) ? p : NULL;
  7. }


 
Le test final est là pour déterminr si le caractère que tu recherches est bien dans la chaine ou pas. Si ta fonction te renvoie NULL, c'est que le caractère n'est pas dans ta chaine.
La fonction te renvoie l'adresse du "x".
 

d'jo a écrit :

Et comment utilise tu le fgets moi j'ai appris avec scanf et en regardant dans le man ... ça m'a pas tellement aidé


Pour utiliser fgets, tu fais :

Code :
  1. while (fgets(ligne, 255, fichier)!=NULL)
  2. {
  3.   ...
  4. }


La condition fgets()!=NULL te permet de faire la boucle tant que fgets n'est ps arrivé au bout du fichier (ou qu'il n'y a pas eu d'ereur).
ligne est un char* : c'est là tu vas "ranger" la ligne qui est lue avec le fgets. Par exemple :

Code :
  1. char ligne[256]

est la bonne déclaration ici, car l'argument suivant du fgets (le 255) dit combien de caractères le fgets va lire avant de s'arrêter (à moins qu'il s'arrète avant s'il a rencontré la fin de la ligne).
enfin, fichier est un FILE*
En  résumé, voici la syntaxe du fgets :

Code :
  1. char *fgets( char *string, int n, FILE *stream );


 
En espérant que ce que j'ai dit est clair, ce qui n'est pas gagné, mais je pense que j'ai suffisament expliqué pour qu'avec une recherche sous google sur fgets, tu puisses comprendre par toi-même son fonctionnement complet. Un site qui m'a bien aidé à commencer, mais avec uniquement les ordres de base : http://www.lri.fr/~aze/page_c/aide_c/matieres.html
 
 

n°1067016
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 18:11:35  profilanswer
 

d'jo a écrit :

non je jete un coup d oeil merci quand meme


Ca veut dire quoi merci quand même ? quand même quoi ? C'est quoi le problème ?  
 
Tu voudrais du code tout cuit ? Ben non, c'est pas comme ça que ça marche.
 
Nous, on est là pour te faire réfléchir. C'est toi qui va trouver la solution, nous on donne des pistes et on recadre, c'est tout.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067022
d'jo
Posté le 30-04-2005 à 18:19:45  profilanswer
 

biensur mais à chaque fois on me donne des liens qui ressemblent au man, moi ce que je veux c'est pas du tout que l'on me donne le code au contraire j'adore trouver , mais pour cela j'ai besoin de comprendre les outils de base c'est à dire comment les utiliser !! C'est juste ce que je voulais pour le fgets !!!!
La d'après le lien que tu m'as donné j'ai l'impression qu'il ne s'adapte pas du tout à ce que je veux faire.
Il peut lire un fichier déjà existant ce qui n'est pas mon cas puisque c'est l'utilisateur qui vas l'entrer


Message édité par d'jo le 30-04-2005 à 18:21:08
n°1067024
d'jo
Posté le 30-04-2005 à 18:21:31  profilanswer
 

un exemple c'était tout !!

n°1067026
d'jo
Posté le 30-04-2005 à 18:23:50  profilanswer
 

merci jercmoi je n'avais pas vu ton message

n°1067032
d'jo
Posté le 30-04-2005 à 18:32:10  profilanswer
 

En fait fgets créé un fichier texte constitué de ce que l'utilisateur entre si j'ai bien compris

n°1067035
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 18:35:38  profilanswer
 

d'jo a écrit :

merci jercmoi je n'avais pas vu ton message


Maintenant, on attend ton code. Va s'y par étapes :  
 
1 - Saisie d'une ligne
2 - Saisie de plusieurs lignes avec une condition de fin de saisie
3 - Comme 2 mais avec stockage des lignes
4 - Comme 3 mais avec traitement des lignes après la saisie
etc.


Message édité par Emmanuel Delahaye le 30-04-2005 à 18:35:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067042
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 18:38:10  profilanswer
 

d'jo a écrit :

En fait fgets créé un fichier texte constitué de ce que l'utilisateur entre si j'ai bien compris


Non. fgets() lit une ligne à partir d'un flux (stdin, ou fichier ouvert en lecture).
 
Mais est-ce que tu vas enfin ouvir ton livre de C ou est-ce qu'on est censé te faire un cours de A à Z ? T'es pas un peu fainéeant des fois ?


Message édité par Emmanuel Delahaye le 30-04-2005 à 18:39:05

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067045
d'jo
Posté le 30-04-2005 à 18:42:36  profilanswer
 

lol pas du tout.
je ne suis pas chez moi de plus je n'ai pas de livre...
Voilà pourquoi je pose tant de question!

n°1067046
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 18:45:06  profilanswer
 

d'jo a écrit :

lol pas du tout.
je ne suis pas chez moi de plus je n'ai pas de livre...
Voilà pourquoi je pose tant de question!


Alors étudie au moins les tutoriels recommandés par ce site, mais arrête de programmer au hasard...
 
Alors ton code, il vient ? Tu parles beaucoup, mais je ne vois rien venir...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067050
d'jo
Posté le 30-04-2005 à 18:48:48  profilanswer
 

Mais pour toi c'est peut etre evident mais moi les pointeurs... alors si en plus ils pointent sur des fonctions commme  
char *fgets( char *string, int n, FILE *stream );
je suis obliger de tester pour voir à quoi tout correspond !

n°1067062
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 19:02:40  profilanswer
 

d'jo a écrit :

Mais pour toi c'est peut etre evident mais moi les pointeurs... alors si en plus ils pointent sur des fonctions commme  
char *fgets( char *string, int n, FILE *stream );


Meuh ? Je ne vois pas de pointeurs pointer sur des fonctions...  

Citation :

je suis obliger de tester pour voir à quoi tout correspond !


Tester, ça veut dire quoi ? Appuyer sur tout les boutons jusqu'à ce que ça marche ? Ne vaut-il pas mieux chercher à comprendre la doc ? Tu ne comprends pas l'anglais ?
 
Nous avons :

  • Une fonction 'fgets()' qui a 3 paramètres et qui retourne l'adresse d'un char.
  • Le premier paramètre est l'adresse de char. En fait, c'est l'adresse du premier élément d'un tableau de char dans lequel vont être rangés les caractères lus.
  • Le deuxième paramètre est un entier qui représente le nombre max de caractère à lire. Une réserve est faite sur cette valeur pour que les caractères lus forment toujours une chaine valide, c'est à dire terminée par un 0 précédé, si possible, du '\n' (caractère de fin de ligne). Une valeur de 3 est le minimum pour saisir une ligne de 1 caractère.  
  • Le troisième paramètre est l'adresse d'un flux ouvert en lecture. stdin est ouvert par défaut. Il est généralement connecté à la console active, qui est elle même généralement connctée au clavier de la machine, cui qui est assez pratique, il faut le dire...
  • si la lecture est correcte, la fonction retourne l'adresse du tableau de destination. En cas d'erreur de lecture, elle retourne la valeur NULL.


Au boulot...


Message édité par Emmanuel Delahaye le 30-04-2005 à 19:09:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067064
d'jo
Posté le 30-04-2005 à 19:06:03  profilanswer
 

ok merci je suis dessus

n°1067068
d'jo
Posté le 30-04-2005 à 19:12:47  profilanswer
 

Voiloo j'ai bien compris ça marche presque mais si j'entre une phrase des caracteres bizar apparaissent à la fin ?
#include <stdio.h>
#include <stdlib.h>
 
int main() {
char text[80];
int i;
 
      printf("Entrez un text : " );
 
      fgets (text, sizeof text, stdin);
      for (i=0 ; i<80 ; i++)
      {
      printf("%c",text[i]);
      }
return 0;
}


Message édité par d'jo le 30-04-2005 à 19:13:24
n°1067069
chrisbk
-
Posté le 30-04-2005 à 19:12:53  profilanswer
 

moi jferais un mappage en mémoire [:dawao]


---------------
NP: HTTP Error 764 Stupid coder found
n°1067070
chrisbk
-
Posté le 30-04-2005 à 19:15:01  profilanswer
 

ah oué non c'est stdin son entree [:pingouino]


---------------
NP: HTTP Error 764 Stupid coder found
n°1067074
IrmatDen
Posté le 30-04-2005 à 19:20:36  profilanswer
 

Tu devrais peut-être arréter d'afficher des caractères quand ce n'est plus ce que l'utilisateur a saisi ? S'il rentre moins de 80 caractères, l'affichage sera un peu n'importe quoi...

n°1067076
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 19:23:48  profilanswer
 

d'jo a écrit :

Voiloo j'ai bien compris ça marche presque mais si j'entre une phrase des caracteres bizar apparaissent à la fin ?
#include <stdio.h>
#include <stdlib.h>
 
int main() {
char text[80];
int i;
 
      printf("Entrez un text : " );


 
      pour être portable, ajouter
 
      fflush (sdtout);
 
http://mapage.noos.fr/emdel/notes.htm#fflush

Citation :


      fgets (text, sizeof text, stdin);


Bien

Citation :


      for (i=0 ; i<80 ; i++)
      {
      printf("%c",text[i]);
      }


Problème. Qui te dis que le tableau a entièrement été rempli ? J'ai pas parlé de '... terminé par un 0' de fois?, T'as pas lu, t'as pas compris ? Il me semble que si text[i] vaut 0 il faut arréter les frais, non ? Tu vas le secouer ce neurone ? Faut que je le décolle au Karcher ?


Message édité par Emmanuel Delahaye le 30-04-2005 à 19:27:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067077
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2005 à 19:25:18  profilanswer
 

chrisbk a écrit :

moi jferais un mappage en mémoire [:dawao]


Pas portable. En plus pas la peine de l'embrouiller... Je lui ai concocté un exo en 4 étapes (voir précédemment), j'aimerais bien m'y tenir...
 
Il s'approche du #1, c'est déjà pas si mal...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1067079
d'jo
Posté le 30-04-2005 à 19:28:43  profilanswer
 

la c'est mieux
#include <stdio.h>
#include <stdlib.h>
 
int main() {
char text[80];
int i;
fflush (stdout);
 
      printf("Entrez un text : " );
 
      fgets (text,sizeof text, stdin);
      for (i=0 ; i<strlen(text); i++)
      {
      printf("%c",text[i]);
      }
return 0;
}

n°1067080
d'jo
Posté le 30-04-2005 à 19:29:14  profilanswer
 

mais je connaissais pas fflush

n°1067084
d'jo
Posté le 30-04-2005 à 19:30:53  profilanswer
 

j'avais pas tout lu $

n°1067086
chrisbk
-
Posté le 30-04-2005 à 19:33:21  profilanswer
 

Emmanuel Delahaye a écrit :

Pas portable. En plus pas la peine de l'embrouiller... Je lui ai concocté un exo en 4 étapes (voir précédemment), j'aimerais bien m'y tenir...
 
Il s'approche du #1, c'est déjà pas si mal...


 
certes, mais franchement pour de la lecture de fichier c'est quandmeme carrément le moins lourd


---------------
NP: HTTP Error 764 Stupid coder found
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  scanner un texte entier

 

Sujets relatifs
[Flash] Problème texte vectoriel[PB] Scanner de ports sous linux
Effacer le texte par défaut d'un champ de formulaireImportation fichier texte en excel avec plus de 256 colonnes
récupérer une chaines de caractère d'un fichier texte[CSS] Texte qui sort de mon bloc
Excel et VB6 ... copier du texte dans un document Excel ? Aide pour Programme de génération aléatoire de texte (Noob)
[Résolu] Insérer dans un champ texte en fonction de checkboxfixer la taille d'un texte area
Plus de sujets relatifs à : scanner un texte entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR