Ragazzi ho questo codice:

codice:
#include <stdlib.h>
#include <stdio.h>

float interpolazione(/*char *p, */float xp);

int main(int argc, char* argv[])
{
    float xp,r;
    printf("Inserire valore xp:\n");
    scanf("%f", &xp);
    printf("\n");
    r=interpolazione(/*argv[1],*/xp);
    if(r==-1){
        printf("\nIl valore introdotto e' fuori intervallo\n\n");
    }    
    else{
         printf("\nil valore della funzione nel punto %.1f vale %.1f\n\n", xp,r);
    }
    system("PAUSE");
    return 0;
}

float interpolazione(/*char *p, */float xp)
{
    FILE *fp;
    
    int coppie;
    int ch; //per la getc
    int n;
    
    float r=0;
    
    if((fp=fopen("f.txt", "r"))==NULL){
        printf("il file non puo' essere aperto.\n");
    }
    
    //conto le coppie
    
    float t1;
    float t2;
    
    while(!feof(fp)) {
        fscanf(fp, "%f %f\n", &t1, &t2);
        coppie++;       
    }
    
    fclose(fp);
    
    printf("\nNumero di coppie: %d", &coppie);
    
    //trasferisco i numeri negli array
    float x[coppie];
    float fx[coppie];
    
    int cont = 0;
    
    while(cont < coppie){
        fscanf(fp,"%f %f\n", &x[cont], &fx[cont]);
        printf("%.1f  %10.1f\n" , x[cont], fx[cont]);
        cont++;
    }
    
    if(xp>x[0]&&xp<x[coppie-1]){
        for(n=1; n<=coppie; n++){
            if( xp>=x[n-1]&&xp<=x[n] ){
                return r=(fx[n-1]+fx[n])/2;
            }                           
        }
    }
    return r=-1;
}
In particolare il conteggio ritorna sempre il medesimo valore e il programma si pianta. Come posso risolvere? Grazie

Ps:c'è un fclose(fp) fuori posto, l'ho spostato ma non cambia nulla