Newsgroup: it.comp.lang.c
Titolo: aiuto

Vi riporto il codice di un programma che dovrebbe restituire 
la posizione di un pattern all'interno di un file.
Penso che ci siano diversi errori visto che ho ancora poca 
esperienza;ringrazio chi mi voglia dare una mano.Ciao.
 
#include <string.h>
#include <stdio.h>
#include <process.h>
main(void)
{
    char c,p[10],str[10000];
    int n,m,i,j;   
    FILE *fp;
    printf("Scrivere il file(massimo 10000 caratteri):\n");
 
    if((fp = fopen("testo.txt", "w")) == NULL)
	{
	     printf("impossibile aprire il file.\n");  /*rilevazione di
errori*/
             return 1;
	}
    while ((c = getchar()) != '?')
        {
	     fprintf(fp,"%c", c);
	     str[i++] = c;
             str[i] = "\0"
	     n++;
	}
    c = getchar();
 
    fclose(fp);
    if((fp = fopen("testo.c","r"))==NULL)
	{
	printf("impossibile aprire il file.\n"); /*rilevazione di errori*/
        return 1;
	}
    printf("digitare il pattern da cercare:\n");
    gets(p);
    m = strlen(p);
    n = strlen(str);
    for(j=0;j<n-m;j++);
        {
            for(i=0;i<m;i++);
            {
                 if(p[i] = str[i])
                 printf("pattern č stato trovato alla posizione
%d\n",j);
                 else printf("pattern inesistente\n");
            }
         }
c = getchar();
return 0;
}

 wrote:
DP>Vi riporto il codice di un programma che dovrebbe restituire 
DP>la posizione di un pattern all'interno di un file.
Te lo ho un po' riscritto, sperando che ti possa servire.
------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
int main(void)
{
        char *p, pattern[10], testo[10000];
        int c, i = 0;
        FILE *fp;
        puts("Scrivere il file (massimo 9999 caratteri):");
        while (((c = getchar()) != '?') && (i < 9999))
                testo[i++] = c;
        testo[i] = '\0';
        while((c = getchar()) != '\n')
                ;
        if ((fp = fopen("testo.txt", "w")) == NULL) {
                perror("fopen"); exit(1);
        }
        if (fwrite(testo, 1, i + 1, fp) != (size_t)(i + 1)) {
                perror("fwrite"); exit(1);
        }
        fclose(fp);
        fputs("Digitare il pattern da cercare: ", stdout);
        fgets(pattern, sizeof pattern, stdin);
        if((p = strchr(pattern, '\n')))
                *p = '\0';
        if ((p = strstr(testo, pattern))) {
                printf("Il pattern '%s' č stato trovato alla posizione %d.\n",
                       pattern, p - testo + 1);
        } else
                puts("Pattern inesistente");
        return 0;
}
------------------------------------------------------------------------------
Ovviamente, non garantisco nulla. <G>
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

                  else printf("pattern inesistente\n");
Così ti scrive tante volte "pattern inesistente". Meglio se la seconda
printf() la metti dopo i due loop e la esegui solo se non ha trovato il
pattern.
Comunque questi errori li avresti trovati benissimo da solo se avessi
provato a compilare il programma e seguito le indicazioni del
compilatore.
EMG


Ti ringrazio moltissimo anche perchè non conoscevo ancora la
funzione fwrite. Ciao

 EMG
Grazie per i consigli. Ciao.