乱数で出した数の重複を防ぐ以下のソースを書いたんだけど、重複が出てくる。
何が悪いの?

srand((unsigned) time(NULL)); /* 乱数の初期化 */
for (i = 0; i <= 5; i++) {
ra = rand() % 42 + 1; /* raに1〜42を入れる */
if (ra == r[i]) { /* raとr[i]が同じなら */
i--;
} else { /* それ以外なら */
r[i] = ra;
}
}