English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

在CODE中 IF判斷式的語法是錯誤的 (value=!3)應該是 (value!=3)
Q:

但為何 可以執行 並得到 This value is = 0
這個0 是從哪裡來的??

以下是我推想:
IF判斷式判斷(value=!3)為false 而得到0
但又怎會轉到%d 而給值為0了呢??
(這推想有可能是錯的,麻煩指正了)

#include
int main()
{
int value1;

printf("key in an word:");
scanf("%d",&value1);
if(value1=!3)
{

printf("this value is= %d\n",value1);
}
else
{

printf("this value is= %d\n",value1);
}
return 0;
}

2007-01-31 12:02:39 · 3 個解答 · 發問者 Akaing 1 in 電腦與網際網路 程式設計

所以是 指令式 成功執行 判斷為true後回傳 1 執行第一個printf

在這裡想問 對於if( ) 括號中的值 是對非0 為true

0為 false 這樣來判斷 但一般情況下判斷式 都會給值 0或1

指令式 執行成功與否也會給 0 或 1 來表示

想問的是 括號中給的值會有屬於 0 1 以外的值嗎??

還是 括號內就只有boolean 代數中 0 1 的兩種可能?

最後有什麼方法可以把大家都選為最佳解答阿??

我覺得大家都回答的很好

運算子優先順序問題 我還真的沒記過順序

謝謝大家

2007-02-02 16:41:39 · update #1

3 個解答

if(value1=!3)

這裡的執行步驟應該為:

1. value1=!3

也就是value1=0;
你可以試著printf("%d\n", !3);
你會發現印出來的是0,
除了0之外,任何數做"!"號運算都得1。
!0則會得到1。
所以value1會等於0。

2. if(value1)

此時的value1=0, 也就是if(false)的意思。
所以會跳到
else
{
 printf("this value is= %dn",value1);
}
印出value1 = 0。

2007-02-03 19:50:48 補充:
if( 非0則為true )

你可以試試看例子:
if( 3 ){
printf(" this is true ! \n");
}

0就是false, 其他都算true.

2007-01-31 12:37:51 · answer #1 · answered by Anonymous · 0 0

if (value = !3)
這段 code 雖然寫錯了,但是是可以執行的
要是你對程式語言夠熟的話
應該會知道 ! 這個運算優先比 = 還要高
所以會先執行 !3 (not)
!k對任何一個非0的整數k來說都會回傳0
相反的,!0的結果是 1
所以現在變成 if (value = 0)
這邊有什麼問題?
(value = 0)是一個statement,而且只有一個等號
value = 0 是將 value 這個變數存成 0 的一段程式碼
成功將 0 存到 value 這個變數之後,這個statement會回傳1表示成功
所以 if (value = 0)這行除了會將value變成0之外,if的判斷也是成功的

這也是為何有些功力不錯的程式設計者會寫類似下面的code:
if (0 == value)
來判斷是否 value 為 0
而不寫
if (value == 0)
如果是很大的 project
將 if (value == 0) 寫成 if (value = 0)
可能得花好幾天才抓得出來
這是題外話 :-)

2007-02-01 21:29:01 · answer #2 · answered by 智強 3 · 0 0

#include
int main()
{
int value1;

printf("key in an word:");
scanf("%d",&value1);
if(value1=!3)
{
printf("this value is= %dn",value1); /* (1) */
}
else
{
printf("this value is= %dn",value1); /* (1) */
}
return 0;
}
先說 " !3 "
!0 = 1
!n = 0 對所有不為 0 的 n
所以 if(value1=!3) 就變成
if(value1=0)
這是大家 (包括我) 常犯的粗心錯誤
value1=0 是一個 "指定" 指令 不是判斷指令
祇要指定成功 就會是 1 (true)
所以你的 "this value is = 0"
是從第一個 printf 來的
因為那時候 value 已經成功地接受了新值 0
(你可以把兩個 printf 的內容寫成不一樣就知道了)
另外一點
你目前的判斷式沒有什麼實值作用
因為不管 value 是什麼值
都會印出 "this value is = xxx" (祇是經由不同的管道)
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.


2007-02-01 03:16:43 補充:
抱歉 else 的部分應該是
else
{
printf("this value is= %dn",value1); /* (2) */
}

2007-01-31 22:15:07 · answer #3 · answered by JJ 7 · 0 0

fedest.com, questions and answers