Originariamente inviato da Hiroe
Non ho usato il break perché all'uni ci hanno consigliato di evitarlo a meno che non sia strettamente necessario. In realtà non so se ce l'hanno detto a scopo didattico o per altri motivi..secondo te perché? L'istruzione break ha aspetti negativi?
Se serve perché non usarlo?
Alcuni sostengono che non sia una buona idea per gli stessi motivi per cui si dovrebbe evitare il goto (fai un salto non condizionale al termine del ciclo, in un certo senso "complicando" il flusso del programma), ma personalmente ritengo che sia una sciocchezza. Il goto può saltare dovunque e dare origine a "spaghetti code", il break e il continue si capisce al volo dove vanno, e in ogni caso capita spesso di avere una seconda condizione da controllare a metà del codice del for, e in tal caso le alternative a break/continue risultano ben più illeggibili.
In ogni caso, dato che hai già un flag in giro, potresti più semplicemente modificare le condizioni dei for:
codice:
flag=0;
for(i=0; i<=(N*N)-1 && !flag; i++) {
for(j=i+1; j<=(N*N)-1 && !flag; j++) {
if(ar[i]==ar[j])
flag=1;
}
}
(tra parentesi, il break che avevo specificato prima non era sufficiente per saltare tutte le restanti iterazioni inutili, dato che esce solo dal for più interno)
Infine, un paio di consigli "stilistici": perché usi "N*N" come dimensione dell'array? Usa semplicemente N.
Inoltre, i vari <=N-1 possono essere semplificati scrivendo <N (in C tipicamente un for che cicla sugli elementi di un array è del tipo:
codice:
for(i=0; i<N; i++)
)
Poi, per verificare se un flag è diverso da zero basta scrivere
dato che l'if viene eseguito appunto se l'espressione specificata è diversa da zero.
Per cui:
codice:
#include<stdio.h>
#define N 4
int main () {
int ar[N];
int i, j;
int flag=0;
for(i=0; i<N; i++){
printf("\nInserire un numero intero (%d interi restanti): ", N-i);
scanf("%d", &ar[i]);
}
printf("\n");
for(i=0; i<N; i++)
printf("%d ", ar[i]);
printf("\n");
for(i=0; i<N && !flag; i++)
for(j=i+1; j<N && !flag; j++)
if(ar[i]==ar[j])
flag=1;
if(flag)
printf("\nCi sono elementi ripetuti!\n");
else
printf("\nNon ci sono elementi ripetuti!\n");
return 0;
}