#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 20
struct terreno
{
	int quota;
	int codice;
};
void files (FILE* fp, double valuex, double valuey, char X, char Y, int risoluzione, int dimx, int dimy, struct terreno terreni[MAXSIZE][MAXSIZE]);
void stampamatrice ( FILE *fp, struct terreno terreni[MAXSIZE][MAXSIZE], int dimx, int dimy, int codice);
int main (int argc, char *argv[])
{
	int i=0;
	int j=0;
	FILE *fp1, *fp2;
	double valuex, valuey;
	char X,Y;
	int risoluzione, dimx, dimy;
	
	
    if ((fp1 = fopen (argv[1], "r")) == NULL)
      {
         printf ("errore apertura file %s\n", argv[1]);
         exit (EXIT_FAILURE);
      }
	  
	 if ((fp2 = fopen (argv[2], "r")) == NULL)
      {
         printf ("errore apertura file %s\n", argv[2]);
         exit (EXIT_FAILURE);
      }
	fscanf(fp1, "%*s %lf %c %lf %c", &valuey, &Y, &valuex, &X);
	fscanf(fp1, "%*s %d", &risoluzione);
	fscanf(fp1, "%*s %d %d", &dimy, &dimx);
	
	struct terreno terreni[MAXSIZE][MAXSIZE];
	
	
	for (i=0; i < dimy; i++)
	{
	   
	   for (j=0; j < dimx; j++) 
	   {
		   fscanf(fp1, "%d %*c %d", terreni[i][j].quota , terreni[i][j].codice);
	   }	
	   
	  
    }
	
	
	files (fp2, valuex, valuey, X, Y, risoluzione, dimx, dimy, terreni);
	fclose (fp1);
	fclose (fp2);
    return EXIT_SUCCESS;
}
void files (FILE* fp, double valuex, double valuey, char X, char Y, int risoluzione, int dimx, int dimy, struct terreno terreni[MAXSIZE][MAXSIZE])
{
	FILE *fp2;
	char nome[64];
	int codice;
	
	while (fscanf(fp, "%d %s", &codice, nome)!=EOF)
   {
		strcat( nome, ".dat");
	    if ((fp2 = fopen ( nome , "w")) == NULL)
	    {
		    printf ("errore apertura file %s\n", nome);
            exit (EXIT_FAILURE);
	    }
		fprintf(fp2, "coordinate_GPS: %f %c %f %c \n" , valuex, X, valuey, Y);
		fprintf(fp2, "risoluzione: %d \n" , risoluzione );
		fprintf(fp2, "dimensioni: %d %d \n" , dimy, dimx );
		
		
		
		stampamatrice (fp2, terreni, dimx, dimy, codice);
		fclose (fp2);
		
    }	
}
void stampamatrice ( FILE *fp, struct terreno terreni[MAXSIZE][MAXSIZE], int dimx, int dimy, int codice)
{ 
	int i=0;
	int j=0;
	while (i<dimy)
	{
		j=0;
		while (j<dimx)
		{
			if (terreni[i][j].codice == codice)
			{
				if (terreni[i][j].quota >= 100)
				{
					fprintf (fp, "%d   ", terreni[i][j].codice);
				} if  ((terreni[i][j].quota < 100)&& (terreni[i][j].quota >= 10))
				{
					fprintf (fp, " %d   ", terreni[i][j].codice);
				} if  (terreni[i][j].quota < 10)
				{
					fprintf (fp, "  %d   ", terreni[i][j].codice);
				}
			 } if (terreni[i][j].codice != codice)
			 {
				fprintf (fp, "  %c   ",  '-' );
			 }
		j++;
		} fprintf (fp, "%c",  '\n' );
		i++;
	}
}
Buonasera a tutti. Mi iscrivo per porvi riguardante questo esercizio. Il codice viene compilato, ma il programma non funziona, e la parte critica sembra essere quella dopo i 3 scanf consecutivi del main. Di seguito vi allego ciò che dovrebbe svolgere il programma: 
https://drive.google.com/file/d/0B35c90odmwYgT3ByVVNhUjFtTDA/view?usp=sharing
Grazie in anticipo