Ciao , ho voluto provare a risolvere il problema , pensavo di riuscirci velocemente , invece
ci ho impiegato 1 ora e 20

ho usato quello che conosco del linguaggio c , quindi sicuramente ci sono metodi di risolvere il problema , migliori più pratici , ma che non conosco
se non ti offende , vorrei postarti le modifiche che ho fatto al tuo programma e sapere
cosa ne pensi .
potrebbero esserci delle imprecisioni o errori , e il codice non è tanto chiaro , ma SEMBRA FUNZIONARE




codice:

#include <stdio.h>
#include <stdlib.h>
int estrai_numeri(char *x,int *posizione);
int main()
{
    FILE *f;
    int num_linea = 0;
    int carat;
    int search;
    int occorrenze = 0;
    int count = 0;
    int ciclo,i=0;
    char buffer[200];
    
    int righe_cont_numero[30]={0};
     int pos_stringa=0;
    f = fopen("testo.txt","r");
    
    printf("\ninserisci numero da trovare:\n");
    scanf("%d",&search);
    printf("\nQuante volte provare:\n");
    scanf("%d",&ciclo);
   
    while(!feof(f))
    {
        if( fgets(buffer,200,f)==NULL)
            break;
        num_linea++;
        pos_stringa=0;
        while(pos_stringa<strlen(buffer))
        {
     
             carat=estrai_numeri(buffer,&pos_stringa);
              printf(" --- %d\n",carat);
     
             if(carat == search) 
             {
             occorrenze++;
             righe_cont_numero[i]=num_linea;
             i++;
             
             }
             
     
    
     
    }
   }   
   fclose(f);
    
    printf("\nIl numero delle linee: %d\n", num_linea);
    printf("\nIl numero delle occorrenze: %d\n", occorrenze);
    printf("\nRighe che contengono il valore richiesto:  ");
    for(i=0;righe_cont_numero[i]!=0;i++)
         printf(" %d ",righe_cont_numero[i]);
    printf("\n");    
    
    system("PAUSE");
}

int estrai_numeri(char *x,int *posizione)
{
    
    char numero[8];
    
     int k=0;
     
     
     while(x[*posizione]!=0)//limita a lunghezza stringa
     {
        if ( x[*posizione]>='0'&& x[*posizione]<='9')
        {
         numero[k]=x[*posizione];
         k++;
         *posizione+=1;
         }    
         else if((x[*posizione]<'0'|| x[*posizione] >'9')&&(numero[0]!=0))
         {
            *posizione+=1;
             return atoi(numero); 
             
             }
             
          else
           *posizione+=1;  
         
         }
    
    
    
    }