PROBLEMA esercizio sui FILE

di il
1 risposte

PROBLEMA esercizio sui FILE

#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

1 Risposte

  • Re: PROBLEMA esercizio sui FILE

    In questa riga...
    fscanf(fp1, "%d %*c %d", terreni[i][j].quota , terreni[i][j].codice);]
    ...passi a scanf degli int anziché degli indirizzi ad int; dovrebbe essere così:
    fscanf( fp1, "%d %*c %d", &terreni[i][j].quota, &terreni[i][j].codice );
Devi accedere o registrarti per scrivere nel forum
1 risposte