// 這里我嘗試列印陣列中正數、負數、偶數、奇數元素的數量。其余的輸出是正確的,除了在 even 的情況下列印 0,顯然它們不是 0。那么這里的錯誤是什么!
#include <stdio.h>
int main()
{
int arr[10] = {2, 4, 6, 8, 10, 11, 13, 15, -2, -4};
int pos = 0;
int neg = 0;
int even = 0;
int odd = 0;
for (int i = 0; i < 10; i )
{
if (arr[i] & 1 == 0)
{
even ;
}
if (arr[i] & 1 == 1)
{
odd ;
}
if (arr[i] > 0)
{
pos ;
}
else if (arr[i] < 0)
{
neg ;
}
}
printf("the odd are %d ,the even are %d ,the positive are %d , the negative are %d\n", odd, even, pos, neg);
return 0;
}
uj5u.com熱心網友回復:
這是因為運算子優先級
arr[i] & 1 == 0等價于arr[i] & (1 == 0),也就是arr[i] & 0,顯然是0,所以條件總是假的。
你想這樣做:
if ((arr[i] & 1) == 0)
{
even ;
}
if ((arr[i] & 1) == 1)
{
odd ;
}
奇怪的測驗已經有效,因為arr[i] & 1 == 1它與您正在檢查的內容相同arr[i] & (1 == 1)。arr[i] & 1
uj5u.com熱心網友回復:
arr[i] & 1 == 0由于運算子優先級,它始終為零。它等同于arr[i] & (1 == 0)which 顯然不是你想要的。
嘗試
if ((arr[i] & 1) == 0) {
even
}
uj5u.com熱心網友回復:
&的優先級低于==,因此arr[i] & 1 == 0結構 asarr[i] & (1 == 0)而不是(arr[i] & 1) == 0。要獲得后者,您必須使用顯式括號。
在編譯器中打開警告,將它們提升為錯誤,并注意編譯器訊息。使用 Clang,從-Wmost -Werror. 使用 GCC,從-Wall -Werror. 使用 MSVC,從/W3 /Wx.
uj5u.com熱心網友回復:
您的代碼的問題在于您使用的條件。他們錯了。判斷一個數是奇數還是偶數的正確方法是:
if (num % 2 == 0)
{
// Even
}
if (num % 2 != 0)
{
// Odd
}
所以最后的代碼:
#include <stdio.h>
int main()
{
int arr[10] = { 2, 4, 6, 8, 10, 11, 13, 15, -2, -4 };
int pos = 0;
int neg = 0;
int even = 0;
int odd = 0;
for (int i = 0; i < 10; i )
{
if (arr[i] % 2 == 0)
{
even ;
}
if (arr[i] % 2 != 0)
{
odd ;
}
if (arr[i] > 0)
{
pos ;
}
else if (arr[i] < 0)
{
neg ;
}
}
printf("the odd are %d ,the even are %d ,the positive are %d , the negative are %d\n", odd, even, pos, neg);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427878.html
上一篇:在c中將節點添加到鏈表的段錯誤
