• 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.