Demande d'Aide pour Motteur de recherche

Demande d'Aide pour Motteur de recherche - C - Programmation

Marsh Posté le 19-03-2005 à 21:09:56    

Bonjour,
j'aimerais savoir s'ils y avaient de gentilles personnes qui pourraient m'aider a realiser mon projet de langage C, dans le cadre de ma scolarité (ecole d'ingé).
Il s'agit de réaliser qui sert a retrouver une information précis au sein d'un ensemble de fichiers.
Deux étapes :
l'indexation,qui consiste a extraire des mots clés de chacun des fichiers; et l'interrogation, qui consiste a comparer les mots de la recherche avec les mots-clés.
 
 
Je ne cherche pas ce projet TOUT FAIT mais surtout de comprendre et de maitriser ce langage qui est le C. Je consulte pour le moment un site de cours en ligne. Mais, ce projet qui doit etre rendu dans 1 mois et demi, vous parait il long a realiser pour un novice?
J'ai qque petites bases mais j'apprends avec dev c++ et le cours en ligne. Combien d'heures estimez vous (en moyenne pour un eleve moyen, ni mauvais ni bon) nécessaires a la réalisation du projet?
 
Merci
:hello:  :hello:


Message édité par zaynyy le 24-03-2005 à 23:51:01
Reply

Marsh Posté le 19-03-2005 à 21:09:56   

Reply

Marsh Posté le 19-03-2005 à 21:32:47    

zaynyy a écrit :

j'aimerais savoir s'ils y avaient de gentilles personnes qui pourraient m'aider a realiser mon projet de langage C, dans le cadre de ma scolarité (ecole d'ingé).
Il s'agit de réaliser qui sert a retrouver une information précis au sein d'un ensemble de fichiers.
Deux étapes :
l'indexation,qui consiste a extraire des mots clés de chacun des fichiers; et l'interrogation, qui consiste a comparer les mots de la recherche avec les mots-clés.
 
Je ne cherche pas ce projet tout fait mais surtout de comprendre et de maitriser ce langage qui est le C. Je consulte pour le moment un site de cours en ligne. Mais, ce projet qui doit etre rendu dans 1 mois et demi, vous parait il long a realiser pour un novice?
J'ai qque petites bases mais j'apprends avec dev c++ et le cours en ligne. Je commence a apprendre les notions de pointeurs pour le moment.
Combien d'heures estimez vous (en moyenne pour un eleve moyen, ni mauvais ni bon) nécessaires a apprendre tout ce qui sera necessaire a la réalisation du projet?


Il faut de 3 à 12 mois pour former un programmeur C. Tri et recherche dans le fichier indexé sont des choses simples (qsort(), bsearch()). Le problème est l'indexation qui dépend du format des fichiers de données (texte, binaire)...
 
Poste ton code et un exemple de fichiers à indexer avec des mots clés...


Message édité par Emmanuel Delahaye le 20-03-2005 à 09:07:07

---------------
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/
Reply

Marsh Posté le 20-03-2005 à 00:10:52    

Emmanuel Delahaye a écrit :

Il faut de 3 à 12 mois pour formar un programmeur C. Tri et recharche dans le fichier indexé sont des choses simples (qsort(), bsearch()). Le problème est l'indexation qui dépend du format des fichiers de données (texte, binaire)...
 
Poste ton code et un exemple de fichiers à indexer avec des mots clés...


 
Merci de ta réponse.
3 a 12 mois...!! C'est pas mal.
 
Voici exactement ce qui m'est demandé :
 
CREATION D'UN INDEX:
 
 
La premiere étape de votre projet concsiste a créer l'index de votre ensemble de fichiers. L'index associe a cq fichier un certain nombre de mots clés.
Ces mots clés doivent etre representatifs du contenu du fichier : en general le nom du fichier et les mots les plus frequents contenus dans le fichier. Les mots les plus frequents ne seront representatifs que si l'on prend pas en compte les mots d'usage courant comme les pronoms ou les articles.
L'indexation est une etape relativement couteuse, qui ne doit pas etre repetée inutilement. Il serait donc souhaitable de conserver l'index dans un fichier. Si l'ensemble des fichiers n'a pas changé, il suffira de lire l'index sans avoir a extraire de nouveau les informations clés de chq fichier.
 
Une fois l'index crée, la recherche a preprement parler peut etre effecteur. L'utilisateur en quete dinformation va entre un certain nombre de mots clés. Vous pourrez estimer que l'utilisateur souhaite retrouver tous ces mots clés dans les fichiers que vous lui proposerez (une autre méthode consiste a estimer qu'il souhaite retrouver un de de ces mots clés dans les fichiers). L'ordre des mots peut aussi avoir son importance.
Vous allez ensuite calculer la pertinence entre l'information cherchée et celle contenue dans les fichiers. Pour cela vous pourrez affecter a cq fichier un score (pourcentage) qui traduira l'adéquation entre les mots clés entrés par l'utilisateur et ceux qui caractérisent le fichier d'apreès l'index.
Si aucun mots-clés ne concordent le score sera nul ; si tous les mots concordent le score dependra du nombre d'occurences des mots clés dans le fichier, ou de leur place : le nom d'un fichier décrit généralement de manière succinte son contenu, si un des mots-clés fait partie du nom de fichier le score devra en tenir compte.
 
(pour cela le prof a donné des lignes annexes consitant a lister le contenu d'un repertoire avec la fonction opendir, readdir, closedir, que je ne connais pas encore)
 
 
A vous de definir et de justifier la façon dont vous allez sestimer ce score. C'est principalement sur ce critère que se différencient les moteurs de recherchs existants. N'hésitez pas vous memes a tester différents critères et a vérifier la pertinence des résultats obtenus.
Enfin vous indiquerez a l'utilisateur par ordre decroissant les fichiers les plus pertinents, ainsi que leur score. Limitez le nombre de fichers ainsi rendus, choississez entr eun nombre limite de fichiers qques soient leurs scores, ou un score limite qqe soit le nombre de fichiers.
 
 
 
INTERFACE GRAPHIQUE
 
 
Votre interface utilisera les fonctions de la bibliotheque LIBX. L'interface decra permettre a l'utilisateur d'entrer du texte (qque mots tout au plus) et de lancer la recherche a l'aide d'un bouton. Elle pourra par exemple, afficher les noms des fichiers les plus pertinents par ordre decroissant de pertinence, ainsi que leur score, une barre de défilement permettant d'acceder a l'ensemble de la liste. Vous pouvez egalement vous inspirer des moteurs de recherche existants.
 
 
 
Puis ensuite il y a des fonctions avancées : "et", "+", "", pour des liens entre les mots.
MAJ auto de l'index
Feedback : l'utilisateur peut lui meme indiquer si les resultats qui lui sont fournis sont pertinents a son sens. Vous pouvez inclure ce parametre pour modifier en conséquence le score de votre fichier par rapport aux mots clés qui étaient demandés.
 
 
 
J'ai consulté tres rapidement ton site au niveau des pointeurs mais je vois pas trop l'interet du pointeurs d'objet:
 
exemple :  
 
/* Definition de la variable 'a' valant 4 */
   int a = 4;
 
   /* Definition d'un pointeur 'p' initialise' avec l'adresse de la variable 'a' */
   int *p = &a;
 
   /* Definition de la variable 'b' non initialisee */
   int b;
 
   /* recuperation de la valeur de 'a' dans 'b' via le pointeur 'p' */
   b = *p;
 
   /* 'b' vaut maintenant 4 */
 
 
Pourquoi on n'utilise pas directement la ligne suivante :
 
int a;
a=4;
int b;
b=a;
 
 
 
"un pointeur sur objet est une variable qui peut contenir l'adresse d'un objet"
Ici, la variable b contient l'adresse de a.
Pourquoi ne pas definir directement b par ce qui contient a, sans passer par le pointeur?
 
 
 
Autre question
 
 
J'utilise LINUX et EMACS à l'école.
Je viens d'installer MATLAB 7 et j'aimerais savoir s'il était possible de l'utiliser comme EDITEUR  et COMPILATEUR  et EXEC des fichiers *.c tel que sous linux avec sa console.


Message édité par zaynyy le 20-03-2005 à 01:12:38
Reply

Marsh Posté le 20-03-2005 à 09:22:30    

zaynyy a écrit :

J'ai consulté tres rapidement ton site au niveau des pointeurs mais je vois pas trop l'interet du pointeurs d'objet:
 
exemple :  
 
/* Definition de la variable 'a' valant 4 */
   int a = 4;
 
   /* Definition d'un pointeur 'p' initialise' avec l'adresse de la variable 'a' */
   int *p = &a;
 
   /* Definition de la variable 'b' non initialisee */
   int b;
 
   /* recuperation de la valeur de 'a' dans 'b' via le pointeur 'p' */
   b = *p;
 
   /* 'b' vaut maintenant 4 */
 
 
Pourquoi on n'utilise pas directement la ligne suivante :
 
int a;
a=4;
int b;
b=a;


Cette partie là du site sert à répondre à des questions souvent posées, pas à faire une initiation au C. Il y a une autre partie du site qui fait un début de commencement d'initiation.  
 
Pour apprendre le C, il faut, comme je l'ai souligné, utiliser un bon livre comme le Kernighan & Ritchie.

Citation :


"un pointeur sur objet est une variable qui peut contenir l'adresse d'un objet"
Ici, la variable b contient l'adresse de a.
Pourquoi ne pas definir directement b par ce qui contient a, sans passer par le pointeur?


Le rôle des pointeurs est principalement de passer l'adresse d'un paamètre à une fonction, soit parce qu'on ne sait pas faire autrement (tableaux, chaines de caractères), soit pour optimiser le code (pour accéder à une structure, son adresse suffit), soit parce qu'on veut modifier une variable dans la fonction appelée. Ces notions n'ont de sens que si on connait quelques bases du langage C...
 
Les pointeurs ont aussi un tas de rôles en programmation 'avancée' (variables dynamiques, structures de données ...)
 
Réaliser en C le projet que tu décris sans aucune connaissance de ce langage me parait une tâche difficile et surtout longue. Quelles sont tes connaissances en programmation ? Le langage C n'est pas un langage de débutant total. Trop de notions complexes...
 
En plus, on te demande de réaliser une interface graphique sous X, ce qui est encore une autre paire de manches... Moi, je parlais du C standard...


Message édité par Emmanuel Delahaye le 20-03-2005 à 09:25:04

---------------
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/
Reply

Marsh Posté le 20-03-2005 à 10:30:51    

Une bonne maniere de realiser ce projet dans le temps imparti serait de l'ecrire en Python + PythonTk (ou en Ruby).
Le Python s'apprend seul en moins d'une semaine, et me parait tout-a-fait adapte a ce projet d'etudiant, en tout cas infiniment plus que le C. Cela laissera meme le temps de tester diverses methodes d'indexation, ce qui est l'interet principal du projet.
Tu pourras continuer l'apprentissage du C dans un second temps, et au moins, tu as de bonnes chances de rendre ton projet dans les temps.
Enfin, si tu tiens absolument a faire du C pour ton projet, commence a ecrire un code qui marche en Python, a chiader ton algo d'indexation, et si tu as encore du temps a la fin, tu pourras reecrire l'algo d'indexation en C, que tu appelleras a partir de Python.


Message édité par el muchacho le 20-03-2005 à 10:35:07
Reply

Marsh Posté le 20-03-2005 à 14:18:18    

el muchacho a écrit :

Une bonne maniere de realiser ce projet dans le temps imparti serait de l'ecrire en Python + PythonTk (ou en Ruby).
Le Python s'apprend seul en moins d'une semaine, et me parait tout-a-fait adapte a ce projet d'etudiant, en tout cas infiniment plus que le C. Cela laissera meme le temps de tester diverses methodes d'indexation, ce qui est l'interet principal du projet.
Tu pourras continuer l'apprentissage du C dans un second temps, et au moins, tu as de bonnes chances de rendre ton projet dans les temps.
Enfin, si tu tiens absolument a faire du C pour ton projet, commence a ecrire un code qui marche en Python, a chiader ton algo d'indexation, et si tu as encore du temps a la fin, tu pourras reecrire l'algo d'indexation en C, que tu appelleras a partir de Python.


 
 
Merci pour ces réponses. Le projet doit être réalisé en C, cela est imposé par le professeur.
 
 

Citation :

Réaliser en C le projet que tu décris sans aucune connaissance de ce langage me parait une tâche difficile et surtout longue. Quelles sont tes connaissances en programmation ? Le langage C n'est pas un langage de débutant total. Trop de notions complexes...  


 
J'ai étudié les notions de base jusqu'aux boucles puis un petit apreçu des pointeurs, des structures, tableaux, et graphisme. Je pense qu'il me faut surtout un bon logiciel pour pouvoir mettre en application directe toutes les notions que j'apprendrais au fur-a-mesure. J'utilise Linux à l'école et a partir de la console de Linux, je pouvais executer directement un fichier compilé (emacs, et eterm). Il y a Matlab mais je ne sais pas si il est apte a cela. Sinon je vais rester avec dev c++ qui me compile mon programme et me génère un fichier executable. Qu'en pensez vous?

Reply

Marsh Posté le 20-03-2005 à 15:23:34    

zaynyy a écrit :

J'ai étudié les notions de base jusqu'aux boucles puis un petit aperçu des pointeurs, des structures, tableaux, et graphisme.


Il n'y a pas de graphisme en C. Ce dont tu parle, c'est l'utilisation de fonctions systèmes (En l'occurence, celles de X/Motif sous unixoide).

Citation :


Je pense qu'il me faut surtout un bon logiciel pour pouvoir mettre en application directe toutes les notions que j'apprendrais au fur-a-mesure.  


Tu parles de l'environnement de développement, c'est ça ?

Citation :


J'utilise Linux à l'école et a partir de la console de Linux, je pouvais executer directement un fichier compilé (emacs, et eterm). Il y a Matlab mais je ne sais pas si il est apte a cela. Sinon je vais rester avec dev c++ qui me compile mon programme et me génère un fichier executable. Qu'en pensez vous?


Dev-C++ fonctionne sous Linux ?


---------------
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/
Reply

Marsh Posté le 20-03-2005 à 15:58:19    

Oui, je parle de l'environnement de travail.
Actuellement, je suis sur XP avec dev c++. A l'école, il s'agit d'emacs de Linux. J'aimerais savoir quel est l'environnement (logiciel, etc...) le plus adapté.

Reply

Marsh Posté le 20-03-2005 à 16:46:07    

zaynyy a écrit :

Oui, je parle de l'environnement de travail.
Actuellement, je suis sur XP avec dev c++. A l'école, il s'agit d'emacs de Linux. J'aimerais savoir quel est l'environnement (logiciel, etc...) le plus adapté.


Si tu dois faire du développemùent graphique sous X, Dev-C++ n'ira pas. Il te faudra recréer un environnement pseudo Linux sous XP avec cygwin par exemple... Bon courage, et il faut une grosse machine...
 


---------------
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/
Reply

Marsh Posté le 20-03-2005 à 16:57:50    

Autant installer Linux si Cygwin a l'air trop compliquer. Non?

Reply

Marsh Posté le 20-03-2005 à 16:57:50   

Reply

Marsh Posté le 20-03-2005 à 17:03:25    

zaynyy a écrit :

Autant installer Linux si Cygwin a l'air trop compliquer. Non?


Oui, mais c'est toi qui parle d'XP...


---------------
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/
Reply

Marsh Posté le 20-03-2005 à 17:34:24    

Oui c'est vrai. Mais là je vais tester Cygwin : je l'installe pour le moment. Si il me convient, je le garderai sinon je prendrerai tout simplement Linux.

Reply

Marsh Posté le 20-03-2005 à 18:32:25    

Voila je test actuellement cygwin, tout s'est bien installé apparemment.
En suivant le tuto sur http://www.funix.org/fr/windows/cygwin.htm
je n'arrive pas executer le programme hello world !
 
En effet, j'efefctue les opération suivantes :
 
"On va écrire le traditionnel programme hello.c qui va nous afficher Hello World !!. Pour cela placez vous dans votre home directory  
cd  
 
Puis tapez  
 
vi hello.c  
 
Voici le contenu du dit-fichier:  
 
int main () {}  
    printf ("Hello world!\n" );  
    return 0;  
}  
 
"
 
 
Mais lorsque je tape vi hello.c , cygwin me renvoie  
bash: vi: command not found
 
 
Idem pour gcc etc...
 
Par hasard, sauriez vous d'ou cela provient?
Les commandes man (par exemple man printf) marchent correctement.

Reply

Marsh Posté le 20-03-2005 à 18:50:38    

Tu n'as pas configuré le chemin vers c: /cygwin/bin, c: /cygwin/usr/bin et c: /cygwin/usr/local/bin
Honnêtement, tu t'emmerderas moins en installant une distrib Linux, où tout est déjà configuré comme il faut.


Message édité par el muchacho le 20-03-2005 à 18:50:57
Reply

Marsh Posté le 20-03-2005 à 19:02:59    

Honnetement, je suis d'accord avec le muchacho, installe linux, par contre il te faut alors une partition de libre pour l'installer.
 
Pour la partie graphique tu vast'amuser sous linux, nous, on nous a faitdévelopper sous Gtk -- et c'était la merde car utilisable sous une seule distribution de linux :D

Reply

Marsh Posté le 20-03-2005 à 19:03:07    

el muchacho a écrit :

Tu n'as pas configuré le chemin vers c: /cygwin/bin, c: /cygwin/usr/bin et c: /cygwin/usr/local/bin
Honnêtement, tu t'emmerderas moins en installant une distrib Linux, où tout est déjà configuré comme il faut.


Merci pour ta réponse. Je vais en effet installer Linux, tu as tout a fait raison. Mais une toute derniere petite tentative avec cygwin : comment puis je configurer les chemins cités stp? Je galère c'est vrai depuis un moment sur cela. Pourtant j'ai également emacs version windows installé sur mon pc.

Reply

Marsh Posté le 20-03-2005 à 19:04:50    

LordHarryPotter a écrit :

Honnetement, je suis d'accord avec le muchacho, installe linux, par contre il te faut alors une partition de libre pour l'installer.
 
Pour la partie graphique tu vast'amuser sous linux, nous, on nous a faitdévelopper sous Gtk -- et c'était la merde car utilisable sous une seule distribution de linux :D


 
 
Mince alors une partition de combien faudrait il stp?
J'ai un vieux hdd de 2go. Peut être que je peux installer Linux dessus uniquement pour de la programmation. 2go c'est trop faible non?

Reply

Marsh Posté le 24-03-2005 à 22:51:47    

aaahaaahahahhaaaaahhhhhaa
je cherche pas les solutions !
c'est comme chercher des cours en ligne. Je l'ai bien préciser d'ailleurs ds mon topic.
Et si ta atteris là, c'est pas par hasard! Tu cherchais quoi?
De toute façon, sa m'a trop avancé!!
Un ptit bonjour a granet de passage.

Reply

Marsh Posté le 29-03-2005 à 23:09:10    

Petite question de passage
 
 
Puis je utiliser la fonction suivante pour mon moteur de recherche afin qu'il reconnaisse un mot donné :
 
 
strcmp(<s>, <t> )  
 compare <s> et <t> lexicographiquement et fournit un résultat:  
 
 
 
 négatif  
 si <s> précède <t>  
 
 
 zéro  
 si <s> est égal à <t>  
 
 
 positif  
 si <s> suit <t>  
 
 
Sinon, devrais je plutot utiliser une boucle avec des if et des chaines de caracteres du genre :
 
 
int L; /*Longueur de la chaine.*/
int l; /*numéro de la ligne.*/
int c; /*numéro de la colonne.*/
char a;
char TXT[200]; /*le mot recherché.*/
char file[l][c]; /*J'ai considéré qu'on va parcourir un fichier texte pouvant être considéré comme un tableau a l lignes et c colonnes.*/
 
/* Saisie des données (mot a recherché)*/
printf("Entrez le mot a recherche (max.200 caractères) :\n" );
gets(TXT);
for (i=0; a!='/0';i++); (Je parcours toute une ligne d'un fichier. Je n'ai pas encore décrit parfaitement cette étape car je m'interesse ici surtout a la comparaison de caracteres)
for (c=0; a!='/0';c++); (Je parcours les colonnes)
 
for (L=0; TXT[L]; L++);
while (TXT[L]==file[i][j])
c++;
 
printf("Le mot recherché se trouve à la ligne %d et a la colonne %d,l,c);
 
j++;
if (c=='/0') i++;c=0;
 
 
 
 
Tout cela est encore trop trop vague pour moi. Je sais que il y a pas mal de fautes, mais je veux surtout savoir si une méthode de ce type peut correspondre a realiser ce projet...


Message édité par zaynyy le 29-03-2005 à 23:09:58
Reply

Marsh Posté le 29-03-2005 à 23:53:28    

utilise les balises fixed et cpp pour afficher des morceaux de man et du code


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 30-03-2005 à 00:57:24    

Ah oui, comme j'avais écris en réponse rapide, javais pas vu

Reply

Marsh Posté le 30-03-2005 à 09:06:13    

zaynyy a écrit :


Puis je utiliser la fonction suivante pour mon moteur de recherche afin qu'il reconnaisse un mot donné :


strcmp(<s>, <t> )  
 compare <s> et <t> lexicographiquement et fournit un résultat:  

 


Oui, si tu cherches une correspondance exacte. Pour un moteur de recherche, c'est évidemment beaucoup trop rigide.

Citation :



char TXT[200]; /*le mot recherché.*/
gets(TXT);



gets() est un bug qu'il ne faut pas utilise. Je recommande ceci:


int fget_s (char *s, size_t size, FILE * fp)
{
   int err;
   if (fgets (s, (int) size, fp) != NULL)
   {
      char *p = strchr (s, '\n');
      if (p != NULL)
      {
         *p = 0;
         err = 0;
      }
      else
      {
         int c;
         while ((c = fgetc (fp)) != '\n' && c != EOF)
         {
         }
         err = 1;
      }
   }
   else
   {
      err = 1;
   }
   return err;
}


qui s'utilise comme ça:


char TXT[200]; /* le mot recherche. */
fget_s(TXT, sizeof TXT, stdin);


Détails ici:
 
http://mapage.noos.fr/emdel/notes.htm#saisie


Message édité par Emmanuel Delahaye le 30-03-2005 à 09:06:48

---------------
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/
Reply

Marsh Posté le 30-03-2005 à 15:18:09    

Petite precision :
 
 printf("Entrez un nombre : " );
   fflush (stdout);
 
J'ai lu sur ta page  
 
"Il y a trois critères qui déclenchent l'émission réelle des caractères :  
 
et parmi ces trois là, il y a ce "fflush (stdout);"
 
 
Mais si on ne met pas ce "fflush (stdout)" , on obtiendra la meme chose sur la sortie non?
 
 
printf("Entrez un nombre : " );
fflush (stdout);
 
 
Avec ou sans ce fflush, on obtient sur la sortie "Entrez un nombre : "
Ce fflush sert a passer par le tampon et c'est l'unique utilité?
 
 

Reply

Marsh Posté le 30-03-2005 à 15:23:21    

[les balises 'fixed' ou 'cpp' please...]

zaynyy a écrit :

Petite precision :


 printf("Entrez un nombre : " );
   fflush (stdout);


J'ai lu sur ta page  
 
"Il y a trois critères qui déclenchent l'émission réelle des caractères :  
 
et parmi ces trois là, il y a ce "fflush (stdout);"
 
Mais si on ne met pas ce "fflush (stdout)" , on obtiendra la meme chose sur la sortie non?


Ca dépend du système. Pour avoir un comportement portable, il faut ce forçage.


---------------
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/
Reply

Marsh Posté le 30-03-2005 à 19:09:20    

Ok j'ai essayé un petit programme de debutant qui affiche sur l'écran , le mot tapé a l'entrée standard mais je n'arrive pas à afficher le i-ème caractère de ce mot. J'ai cherché un peu partout mais je ne trouve pas pourquoi j'ai faux. Voici le code :
 

Code :
  1. #include <stdio.h>
  2. main()
  3. {    char *MOT[200]; /*déclare un tableau de pointeurs sur des éléments du type char */
  4.      int i;
  5.      printf("Entrez un mot : " );
  6.      scanf("%s",MOT[200]); /*Saisis les valeurs et les retiens dans les cases du tableau*/
  7.      printf("Voici le mot taper :%s \n", MOT[200]);
  8.      getch();
  9.      for (i=0;MOT[i];i++)
  10.      printf("Voici la %d -eme lettre de ce mot  : %c \n",i+1,MOT[i]);
  11.      getch();
  12.      return 0;
  13. }


 
 
Et pour le " fflush(stdout) " , il faut le mettre donc a chaque fois qu'on rentre un printf() ?
 
 
Je teste cette fonction pointeur avec scanf() et printf(), puis je verrais la différence avec ton fgets().


Message édité par zaynyy le 30-03-2005 à 19:13:40
Reply

Marsh Posté le 30-03-2005 à 21:32:21    

zaynyy a écrit :

Ok j'ai essayé un petit programme de debutant qui affiche sur l'écran , le mot tapé a l'entrée standard mais je n'arrive pas à afficher le i-ème caractère de ce mot. J'ai cherché un peu partout mais je ne trouve pas pourquoi j'ai faux. Voici le code :

Code :
  1. #include <stdio.h>
  2. main()
  3. {    char *MOT[200]; /*déclare un tableau de pointeurs sur des éléments du type char */
  4.      int i;
  5.      printf("Entrez un mot : " );
  6.      scanf("%s",MOT[200]); /*Saisis les valeurs et les retiens dans les cases du tableau*/
  7.      printf("Voici le mot taper :%s \n", MOT[200]);
  8.      getch();
  9.      for (i=0;MOT[i];i++)
  10.      printf("Voici la %d -eme lettre de ce mot  : %c \n",i+1,MOT[i]);
  11.      getch();
  12.      return 0;
  13. }




Ce code est très faux.  

  • Tu définis un tableau de pointeurs, mais ces pointeurs ne sont pas initialisés. scanf() écrit n'importe où. Le comportement est indéfini (chez moi, crash). Utilise plutôt un tableau de char à 2 dimensions pour commencer...  
  • En plus, tu passes le pointeur 200 qui n'existe pas. (0-199).
  • getch() n'est pas standard...  

Quelle salade !

Citation :

Et pour le " fflush(stdout) " , il faut le mettre donc a chaque fois qu'on rentre un printf() ?


Si la chaine n'est pas terminée par un '\n', oui.

Citation :

Je teste cette fonction pointeur avec scanf() et printf(), puis je verrais la différence avec ton fgets().


Meuh ! Ce n'est pas 'mon' fgets(). C'est celui du langage C.


---------------
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/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed