#include <stdio.h>
int main(void){
int num[6];
int i,k;
int again;
int out=0;
again=1;
while(again==1){
again=0;
printf("請輸入號碼\n");
for ( i = 0; i < 6; i++){num[i]=0;}
scanf("%d,%d,%d,%d,%d,%d",&num[0],&num[1],&num[2],&num[3],&num[4],&num[5]);
for ( i = 0; i < 6; i++){
for (k = 0; k<i ; k++){
if (num[i]==num[k]){
printf("輸入重複,重新輸出\n");
out=1;
again=1;
break;
}
}
if(out){break;}
}
if(again){continue;}
}
return 0;
}****
您好!我是剛學c的初學者,想請問一下在雙重for回圈內的 k<i 為什麼和改成 k>i 的結果會不同?(K>I的結果無法顯示:輸入重複,重新輸出)
卡住的時候,可以加入print幫助查看
for ( i = 0; i < 6; i++){
printf("i=%d,滿足條件i<6,執行第一個迴圈內容\n",i);
for (k = 0; k<i ; k++){
printf("i=%d,k=%d,滿足條件k<i,執行第二個迴圈內容\n",i,k);
if (num[i]==num[k]){
printf("輸入重複,重新輸出\n");
out=1;
again=1;
break;
}
}
if(out){break;}
}
試試看比較 k<i 跟 k>i
for (k = 0; k<i ; k++)
第一個條件:k的初始值是0,
第二個條件:如果k < i 就執行迴圈,
第三個條件:迴圈執行完畢之後k = k + 1(k++)
程式的目的是「檢查六個數字有沒有重覆」
寫法是
1.N2 vs N1
2.N3 vs N2, N3 vs N1
3.N4 vs N3, N4 vs N2, N4 vs N1
4.N5 vs N4, N5 vs N3, N5 vs N2, N5 vs N1
5.N6 vs N5, N6 vs N4, N6 vs N3, N6 vs N2, N6 vs N1
寫成迴圈就是 k<i
那個版本
至於 k>i
的結果就如上圖
連一列都沒有顯示
表示迴圈一次都不會執行
也就是「完全沒有檢查重覆」
這就是差別所在