codice:
#include <stdio.h>
/* La macro ARRSIZE consente di calcolare il numero di elementi di un array di cui siano note le dimensioni a compile-time */
#define ARRSIZE(arr) (sizeof(arr)/sizeof(*(arr)))
/* Cerca un elemento in un vettore di int; restituisce l'indice dell'elemento o -1 castato a unsigned long se non ha trovato nulla */
unsigned long findInVector(int Value, int * Vector, size_t VectorSize);
/* Entrypoint */
int main(void)
{
/* Vettore in cui andiamo a memorizzare gli elementi */
int vector[5];
/* Posizione corrente nel vettore */
int pos;
/* Ciclo che si ripete per ogni elemento del vettore */
for(pos=0;pos<ARRSIZE(vector);pos++)
{
/* Acquisizione del numero */
printf("Inserisci un numero per vector[%d]: ",pos);
if(scanf("%d",&vector[pos])!=1)
{
/* Se la scanf restituisce un valore diverso da 1 significa che non è riuscita ad ottenere il numero (l'utente ha inserito una valore non numerico) */
puts("Valore non valido.");
/* Svuota il buffer di input */
while(getchar()!='\n')
;
/* Torna indietro di una posizione */
pos--;
/* Procede con la prossima iterazione */
continue;
}
/* Cerca l'elemento nella parte di vettore finora caricata (escluso il valore corrente) */
if(findInVector(vector[pos],vector,(size_t)pos)!=(unsigned long)-1)
{
/* Se lo trova notifica l'errore */
puts("Numero gia' inserito.");
/* Torna indietro di una posizione */
pos--;
/* Procede con la prossima iterazione */
continue;
}
}
/* Tutto ok */
return 0;
}
/* Cerca un elemento in un vettore di int; restituisce l'indice dell'elemento o -1 castato a unsigned long se non ha trovato nulla */
unsigned long findInVector(int Value, int * Vector, size_t VectorSize)
{
/* Posizione corrente */
unsigned long pos;
/* Ciclo che si ripete per ogni elemento del vettore */
for(pos=0;pos<VectorSize;pos++)
{
/* Se il valore dell'elemento è uguale al valore da cercare la ricerca è finita */
if(Vector[pos]==Value)
return pos;
}
/* Se si arriva qui significa che non è stato trovato nulla */
return (unsigned long)-1;
}