Ci sono ancora delle cose che non vanno. Sono cose anche qui forse un po' sottili per un principiante, ma preferisco sottolinearle.
1) Defines: avendo due vettori di ingresso, con la stessa dimensione, e un vettore di uscita con dimensione doppia, ho due osservazioni:
a) I nomi DIM1 e DIM2 non mi sembrano significativi, perché potrebbero essere associati ai vettori IN1 e IN2 e non a quelli IN1,2 e OUT.
b) Poiché la seconda dimensione è sempre il doppio della prima conviene definirla già così.
Morale, scriverei qualcosa così:
- Codice: Seleziona tutto
#define INBUF_SZ 10
#define OUTBUF_SZ (2*(INBUF_SZ))
(Notare le parentesi nella seconda definizione)
2) Input: il codice
- Codice: Seleziona tutto
for (i=0;i<DIM1;i++)
{
scanf("%d", &IN1[i]);
if (IN1[i]<0)
i--;
}
non va bene (anche quello scritto da
simo85 non va bene). Il motivo è che l'input da tastiera è bufferizzato e se uno vuole fare un controllo degli errori deve farlo bene, altrimenti è meglio non farlo per nulla. Supponiamo, infatti, che in risposta al prompt l'utente digiti (supponiamo che gli scappi un '-' al secondo numero):
- Codice: Seleziona tutto
4 -5 6 8
e poi prema il tasto
Invio. Cosa fa il programma? Memorizza 4, salta -5, e memorizza 6 e 8. L'utente non avrà più la possibilità di inserire 5 nell'ordine richiesto inizialmente, come probabilmente voleva
tecfil.