我有以下一段代碼,它呼叫一個函式來回傳玩家應接收的移動次數。在這種情況下,此函式接受一個字符變數為 T。
printf("Number Of Moves: %d\n\n", getRoll('T'));
這個函式然后生成一個 1 到 10 之間的亂數,然后通過 if 陳述句。我的問題是 if 陳述句不起作用,我不確定為什么。我在 if 陳述句之前列印了隨機變數,它作為 1 到 10 之間的數字正常作業。
(我也意識到我的 switch 陳述句中目前只有一種情況,但還會有其他情況。)
int getRoll(char letter) {
int num = (rand() % 10) 1;
char plyr = letter;
int numMoves;
switch (plyr) {
case 'T':
printf("This is the random number: %d", num);// This is working
if (1 <= num <= 5) {
numMoves = 3;
} else if (6 <= num <= 7) {
numMoves = -6;
} else if (8 <= num <= 10) {
numMoves = 1;
}
break;
}
}
return numMoves;
}
uj5u.com熱心網友回復:
這不會像你認為的那樣做:
(1 <= num <= 5)
它實際上決議為:
((1 <= num) <= 5)
所以首先1 <= num進行評估,結果為 0 或 1。然后將結果與 5 進行比較,即0 <= 5或1 <= 5。兩者都為真,因此運算式始終為真。
這里需要兩個單獨的比較,用邏輯 AND 分隔
(1 <= num && num <= 5)
你需要做一個類似的修復(6 <= num <= 7)和(8 <= num <= 10)
uj5u.com熱心網友回復:
只是你在那里做的一件小事。當您寫 X< num < y 時,它不會將三個數字相互比較,請嘗試在那里使用 and 運算子。
if (1 <= num && num <= 5) {
numMoves = 3;
} else if (6 <= num && num <= 7) {
numMoves = -6;
} else if (8 <= num && num <= 10) {
numMoves = 1;
}
uj5u.com熱心網友回復:
例如在這個 if 陳述句中的運算式:
if (1 <= num <= 5) {
可以等效地重寫為:
if ( ( 1 <= num ) <= 5) {
根據 C 標準(6.5.8 關系運算子)
6如果指定的關系為真,則每個運算子 <(小于)、>(大于)、<=(小于或等于)和 >=(大于或等于)應產生 1 如果指定的關系為真,則為 0是假的。結果的型別為 int。
因此,由于變數num的初始化,它的值總是大于或等于 1
int num = (rand() % 10) 1;
然后子運算式( 1 <= num )總是1根據 C 標準的參考計算為整數值。事實上你有:
if ( 1 <= 5) {
這意味著 if 陳述句的整個運算式也總是計算為邏輯真。
因此,if 陳述句的計算結果與存盤在變數中的值無關num。
很明顯,在這個 if 陳述句和其他類似的 if 陳述句中,您要使用邏輯 AND 運算子,例如
if ( 1 <= num && num <= 5) {
為了可讀性也可以這樣寫
if ( ( 1 <= num ) && ( num <= 5 ) ) {
這樣你就會有
if ( ( 1 <= num ) && ( num <= 5 ) ) {
numMoves = 3;
} else if ( ( 6 <= num ) && ( num <= 7 ) ) {
numMoves = -6;
} else if ( ( 8 <= num ) && ( num <= 10 ) ) {
numMoves = 1;
}
由于num總是大于或等于 1,那么您也可以按照以下簡化方式重寫 if 陳述句
if ( num <= 5 ) {
numMoves = 3;
} else if ( num <= 7 ) {
numMoves = -6;
} else if ( num <= 10 ) {
numMoves = 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369993.html
上一篇:C 中if的奇怪行為
