Che vuol dire "non si aggiorna scanf" ? Che dati inserisci ?

E poi non ha senso usare il ! per il prezzo (dato che non è un valore intero). Semmai

while (!i || prezzo<=0.0);