Newsgroup: it.comp.lang.c
Titolo: Ricerca stringhe in un progetto con più file...

Ciao a tutto il ng, mi trovo alle prese con un problema che credo sia
semplice ma che non riesco a risolvere da giorni!
Il prof di informatica ci ha dato da realizzare questo progetto:
Un utente apre un .txt in cui vi è contenuto il numero di parole e le
parole. Dopo aver acquisito il numero di parole dovremmo fare
un'allocazione dinamica con malloc, acquisire tutte le parole,
passarle ad una funzione di ricerca e ritornare
il numero della posizione della parola (se presente). Il tutto va
diviso in tre file un main, un file .h con il prototipo della funzione
di ricerca e un file in cui è contenuta la funzione stessa di ricerca.
Io ho elaborato quest codice:
====MAIN=====
#include <stdio.h>
#include <stdlib.h>
#include "RicercaStringaH.h"
int main()
{
              /*DICHIARAZIONE VARIABILI*/
FILE *filein;
int i, numparole, pos;
parola elencoparole[30],parolacercata,*puntpar;
char nomefile[30];
               /*INIZIO PROGRAMMA*/
printf("Inserire il nome del file\n\t==>");
scanf("%s",nomefile);
filein=fopen(nomefile,"r");
if (filein==NULL)
   printf("Errore nell'apertura del file");
else{
    fscanf(filein,"%d",&numparole);   
    puntpar=((parola *)malloc(numparole*sizeof(parola)));
    for (i=0;i<numparole;i++)
        {                            
        fscanf(filein,"%s",&elencoparole[i]);
        }
     pos=StrLinSearch(parolacercata, elencoparole[], numparole);
     if pos (==-1)
        printf("Parola non presente nell'archivio");
     else
         printf("Parola trovata alla posizione 
n.ro
 %d",pos);
     }
      system("PAUSE");
      return 0;
}
===FINE DEL MAIN===
===LIBRERIA===
typedef char parola[15];
int StrLinSearch (parola,parola[],int);
===FINE LIBRERIA===
===FUNZIONE DI RICERCA===
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int StrLinSearch(parola parolacercata, parola elencoparole[],int
numparole)
{
int i;
for (i=0;i<numparole;i++)
{
if (strcmp(parolacercata, elencoparole[i])==0)
   return i+1;
}
 
}
===FINE FUNZIONE DI RICERCA===
Ciao a tutti e grazie a quanti vorranno aiutarmi!
Luigi

         printf("Parola non presente nell'archivio");
Per come hai definito erroneamente StrLinSearch, il valore -1 non
viene mai ritornato....
ciao,
g.

 g.
Ciao e grazie mille per i suggerimenti!
Luigi

Seguendo le tue indicazioni ho rifatto il progetto, l'ho compilato e
fatto girare, sembra andare bene, mi dai un tuo parare in merito? Ti
posto il codice:
===HEADER===
typedef char tipoparola[15];
int StrLinSearch (tipoparola,tipoparola,int);
===FINE HEADER===
===MAIN===
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "HeaderRicercaStringa.h"
int main()
{
typedef char tipoparola[15];
int i,numparole,posizione;
FILE *filein;
tipoparola parolacercata,nomefile, *puntvettparole;
printf("digitare il nome del file di input\n\t==>");
scanf("%s",&nomefile);
filein=fopen(nomefile,"r");
if (filein==NULL)
   printf("errore nell'apertura del file");
else{
     fscanf(filein,"%d", &numparole);
     if (numparole!=0){
        puntvettparole=
(tipoparola*)malloc(numparole*sizeof(tipoparola));
        printf("digitare la parola da cercare\n\t==>");
        scanf("%s",&parolacercata);
        for (i=0;i<numparole;i++){
            fscanf(filein, "%s", *(puntvettparole+i));}
        posizione= StrLinSearch(parolacercata, *puntvettparole,
numparole);
        if(posizione!=0) printf("Parola trovata alla posione 
n.ro
%d\n\n",posizione);
        else printf("Parola non presente nella base di dati\n\n");
        }
}      
 
 
 
      system("PAUSE");
      return 0;
}
===FINE MAIN===
===FUNZIONE DI RICERCA===
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char tipoparola[15];
int StrLinSearch (tipoparola parolacercata,tipoparola
*punvettparole,int numparole)
{
int i, comp;
for (i=0;i<numparole;i++){
    comp= strcmp(parolacercata, *(punvettparole+i));
    if (comp==0) return i+1;
    }
return 0;
}
===FINE FUNZIONE DI RICERCA===
Credo vada ancora perfezionato ma questo č gią un bel passo per me!
Ciao e grazie per l'attenzione,
Luigi

 #include <stdlib.h>
sono inutili nel file di ricerca.
la dichiarazione di StrLinSearch e la definizione della stessa
sono diverse (e cio' non e' cosa buona): il secondo parametro
da una parte e' un puntatore dall'altra no.
Il cast nella malloc e' inutile (e puo' essere dannoso in generale).
Visto che sono gratis, metti un a capo tra un istruzione e l'altra...
La leggibilita' (anche se e' una cosa molto personale) del tuo codice
puo' essere migliorata di molto :-)
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG