questo è il codice commentato spero si capisca tutto..ho rimesso solo il codice..la prima e l'ultima parte sono uguali alla domanda originale
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(int argc,char *argv[])
{
int i,j,r,l,x1,y1,x2,y2,flag,s;
char str[12],matrice[N][N];
FILE*fp;
fp=fopen("rett.txt","w");
//inizio a scrivere il file
if(fp==NULL){
printf ("\nerrore apertura file in write\n");
return -1;
}
//scrivo 5 stringhe..composte da 4 numeri di massimo 2 cifre..spazio tra i numeri e \n alla fine
for(i=0;i<5;i++){
printf("\nscrivi quattro numeri intervallati da spazio di massimo 2 cifre ciascuno \n");
gets(str);
fprintf(fp,"%s\n",str);
}
// chiudo il file
r=fclose(fp);
if(r==EOF){
printf("\nerrore chiusura file in write\n");
return -2;
}
//faccio il controllo sul numero di parametri passati da linea di comando
if(argc!=2){
printf("\nerrore numero di parametri passati da linea di comando\n");
return -3;
//apro il file in lettura e il nome lo passo da linea di comando
}
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("\nerrore apertura file in read\n");
return-4;
//inizializzo la matrice col carattere underscore '_'
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
matrice[i][j]='_';
}
}
flag=0;//metto un flag a 0..che mi aiuterà a stabilire se i rettangoli si sovrappongono nella matrice o no
s=1;//questo è il contatore per vedere l'eventuale posizione di errore numero di parametri nella conversione da stringa ad interi
while(fgets(str,12,fp)!=NULL){//inizio la lettura del file
l=sscanf(str,"%d %d %d %d",&x1,&y1,&x2,&y2);//converto la stringa in interi(che mi rappresentano le coordinate del primo punto del rettangolo in alto a sinistra (x1,y1)e le coordinate del punto in basso a destra(x2,y2))
printf(" num par=%d in pos %d\n",l,s);//qua verifico il numero di parametri 'l' per ogni posizione 's'
if(l!=4){ //qua verifico che il numero di parametri siano 4
printf("\nerrore nella formattazione dei parametri da stringa ad interi:num par= %d in pos %d\n",l,s);
return -5;
}
s++;//superato il controllo incremento la variabile posizione
if(x1>=x2||y1>=y2||x1<0||x1>=N||y1<0||y1>=N||x2<0| |x2>=N||y2<0||y2>=N){//qua mi chiedo se il file rispetta il formato richiesto,cioè x1 e y1 devono essere minori di x2 e y2..e tutti e 4 devono essere compresi tra 0 ed N con N escluso
printf("\nerrore nel formato del file\n");
return -6;
}
for(i=x1;i<=x2;i++){ //qua inizio il ciclo che dovrà all'interno della matrice tra le coordinate che mi interessano cioè x1,x2 per le righe
for(j=y1;j<=y2;j++){y1,y2 per le colonne
if(matrice[i][j]=='_')//qui mi chiedo se la matrice ha il valore con cui l'ho inizializzata..se si ci metto un '1'
matrice[i][j]='1';
else{
matrice[i][j]='2'; //se no ci metto un '2' e in questa seconda ipotesi cambio del flag a 1
flag=1;
}
}
}
}
r=fclose(fp);//chiudo il file
if(r==EOF){
printf("\nerrore chiusura file in read\n");
return -7;
}
if(flag==0)
printf("\nnon ci sono sovrapposizioni\n"); //a questo punto mi chiedo se il flag è 0 o no..se è 0 vuo dire che non ho scritto la matrice in zone già occupate…cioè non ho scritto '2' ma sempre '1' avendo sempre trovato posto libero
else
printf("\nc'e' almeno una sovrapposizione\n");//in caso il flag non fosse 0(sarebbe 1) vuol dire che c'é almeno un '2' nella matrice cioè era già occupata la posizione
for(i=0;i<N;i++){//qua visualizzo a schermo i valori della matrice;solo nel caso in cui non sia uguale a underscore '_ 'cioè il valore con cui l'ho inizializzata
for(j=0;j<N;j++){
if(matrice[i][j]!='_')
printf("\nmatrice[%d][%d]=%c\n",i,j,matrice[i][j]);
}
for(i=0;i<N;i++){//e qui la vedo graficamente
printf("\n");
for(j=0;j<N;j++)
printf("%c",matrice[i][j]);
}
}
return 0;
}