iT邦幫忙

0

c語言提問

#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的結果無法顯示:輸入重複,重新輸出)

EN iT邦研究生 2 級 ‧ 2021-07-10 00:11:14 檢舉
建議你去補充一下各種 Operator 跟 Loop 的使用方式與原理,你問的問題跟 C 語言本身沒有太大的關聯,你提供的程式碼也有很多無用的邏輯,相信你仔細看 Loop 的工作原理後會寫得更好。
haward79 iT邦新手 3 級 ‧ 2021-07-10 00:59:54 檢舉
你問的是一個邏輯問題,所以不管寫哪種程式語言都有可能遇到,與 C lang 無直接關係。< 和 > 是 operator;i 和 k 是變數,在這邊當作 operand 使用。i < k 會取出變數 i 和 k 當中的值並比較,若 i 小於 k 會回傳 boolean True,否則會回傳 boolean False。i > k 則是會取出變數 i 和 k 當中的值並比較,若 i 大於 k 會回傳 boolean True,否則會回傳 boolean False。

以上若是你看不懂,請先一一檢視以下東西是否已學懂:
(1) 邏輯
(2) 變數
(3) 運算元、運算子(operand & opera)
0
uobik
iT邦新手 4 級 ‧ 2021-07-10 06:36:05

卡住的時候,可以加入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

0
小魚
iT邦大師 1 級 ‧ 2021-07-10 08:19:47
for (k = 0; k<i ; k++)

第一個條件:k的初始值是0,
第二個條件:如果k < i 就執行迴圈,
第三個條件:迴圈執行完畢之後k = k + 1(k++)

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-07-11 23:04:03

https://ithelp.ithome.com.tw/upload/images/20210711/20001787mfqodv8GT5.png

程式的目的是「檢查六個數字有沒有重覆」
寫法是
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 的結果就如上圖
連一列都沒有顯示
表示迴圈一次都不會執行
也就是「完全沒有檢查重覆」

這就是差別所在

我要發表回答

立即登入回答