#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