Credo che il problema principale è la non inizializzazione dei contatori. Li devi iniziare a 0 altrimenti partono da un valore casuale situato precedentemente nella zona di memoria (anche se ci sono dei compilatori che inizializzano tutti gli interi a 0).
Altro potenziale errore: i due printf li hai messi consecutivamente senza spazi né punti a capo. Quindi vedresti i due numeri attaccati (es. se il risultato è 16 e counter[0] è 2 vedresti 162).
Ecco il codice funzionante con le due modifiche suddescritte:
codice:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int counter[4]={0,0,0,0}
,i, effettivoX, effettivoY;
char sposta[10000];
printf("Dammi la coordinata");
scanf("%s", &sposta);
i=0;
while (sposta[i] !='*')
{
switch(sposta[i])
{
case 'N': counter[0]++; break;
case 'S': counter[1]++; break;
case 'O': counter[2]++; break;
case 'E': counter[3]++; break;
}
i=++;
}
effettivoY = counter[0]-counter[1];
effettivoX = counter[2]-counter[3];
printf("%d", effettivoX*effettivoX+effettivoY*effettivoY );
printf("\n%d", counter[0]);
}
Comunque, non c'è bisogno di usare un array per conservarsi tutti gli spostamenti. E' sufficiente tenere a mente dov'è situato lo struzzo mano a mano che si leggono gli spostamenti (basta conservarsi le coordinate X e Y che partono da (0,0) )
ti dò qui una versione migliorata:
codice:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int x=0, y=0, i=-1;
char sposta[10000];
printf("Dammi le coordinate : ");
scanf("%s", &sposta);
while (sposta[++i] !='\0')
switch(sposta[i])
{
case 'N': y--; break;
case 'S': y++; break;
case 'O': x--; break;
case 'E': x++; break;
}
printf("\nIl quadrato della distanza è %d\n", x*x + y*y);
}
ps tra le altre cose ho preferito fermare la lettura dei caratteri semplicemente quando si è arrivati alla fine della stringa (carattere '\0')