- Usa i tag CODE
- Il testo non dice che devi chiedere la dimensione, ma che devi fermarti quando l'utente inserisce "end"
- I tuoi due cicli annidati non hanno un significato: ripeti n volte un inserimento che dovrebbe fermarsi quando l'indirizzo della stringa dato[i].luogo è diverso da 0
- 2 sono i metodi: allocare un vettore sovradimensionato di strutture o riallocare il vettore quando ti serve più spazio che, nel caso più semplice, significa riallocarlo ad ogni inserimento per contenere un elemento in più (Nota che questo meccanismo è inefficiente)
Questa è la struttura base, vedi di capire come funziona e completa con quello che manca
codice:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct
{
char luogo[30];
float valore;
}rilevazioni;
int main()
{
rilevazioni *dati=NULL;
int size = 0;
char luogo[30];
while(1)
{
printf("Inserisci luogo: ");
scanf("%s", luogo);
if(strcmp(luogo, "end")==0) break;
dati = (rilevazioni *)realloc(dati, sizeof(rilevazioni)*(size+1));
strcpy(dati[size].luogo, luogo);
printf("Inserisci tasso d'inquinamento: ");
scanf("%f", &dati[size].valore);
size += 1;
}
int i;
printf("\n\n");
for(i = 0; i < size; i++)
printf("Luogo: %s\t\tTasso d'Inquinamento: %f\n", dati[i].luogo, dati[i].valore);
free(dati);
return 0;
}
P.s. il testo ti dice esplicitamente di usare un vettore, a me parrebbe più efficiente e più adatta alla situazione una lista con inserimento ordinato.