Grazie a tutti per i consigli. Scusate se non sono molto chiaro ma è il primissimo corso di informatica.
Il debug l'ho fatto e non mi rivela né warning né errori. Ho inizializzato la variabile indice a 0, ma una volta lanciato il programma mi da un messaggio di errore apertura file.
I file che dovrebbero essere inseriti da linea di comando li ho creati e li ho inseriti da code blocks in
project --> set program arguments
Ciò che mi preme di più è capire se l'algoritmo è corretto.
Grazie a tutti per l'aiuto.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 40
#define M 20
typedef struct {
char regione[M];
int npersone;
}struttura;
int main(int argc, char* argv[])
{
//parte dichiarativa//
FILE*fr1,*fr2,*fw;
struttura risultato[M];
char base[N];
char regione[M][N];
int i,j,regioni_non_in_elenco =0,flag =0,dim =0,indice = 0;
//controllo linea di comando//
if (argc != 3)
{fprintf(stdout,"Errore linea di comando");
return 1; }
//apertura file//
fr1 = fopen(argv[1],"r");
if (fr1 == NULL)
{
fprintf(stdout,"Errore apertura file");
return 1;
}
fr2 = fopen("regioni.txt","r");
if (fr2 == NULL)
{
fprintf(stdout,"Errore apertura file");
return 1;
}
fw = fopen(argv[2],"w");
if (fw == NULL)
{
fprintf(stdout,"Errore apertura file");
return 1;
}
//algoritmo//
for ( i= 0; i<N ;i++)
{
fscanf(fr2,"%s",regione[i]);
}
dim = i;
//chiusura file//
fclose(fr2);
while ((fscanf(fr1,"%*s %*s %*s %s",base))!= EOF)
{
for (i=0; i<dim; i++)
if (strcmp(base, regione[i])!= 0)
{regioni_non_in_elenco ++;}
if (strcmp(base, regione[i])== 0)
{
flag = 0;
for (j=0; j<indice; j++)
{
if ((strcmp(regione[i],risultato[j].regione)==0) && flag != 1)
{risultato[j].npersone ++;
flag = 1;}
if ((strcmp(regione[i],risultato[j].regione)!=0) && flag == 0)
{strcpy(risultato[i].regione,regione[j]);
indice ++;}
}
}
}
fclose(fr2);
//ciclo di stampa struttura
printf("Regione Persone");
for ( i=0; i<indice; i++)
{fprintf(fw,"%40s %d",risultato[i].regione,risultato[i].npersone);}
fclose(fw);
return 0;
}