PDA

查看完整版本 : 有關遞增的值的問題


哈啦
2014-03-06, 06:10 PM
第一個是基本的遞增函數,如果使用者輸入6,則因為x++,輸出的答案是7:

#include <stdio.h>

int main(void)
{

int x;
printf("enter a number: \n");
scanf("%d",&x);
x=x++;

printf("%d",x);

return 0;
}


但改成如下比較複雜的程式碼,算出來之後,本來是預期如果使用者輸入6,因為x++,答案會是7,但結果輸出的答案還是6?

#include <stdio.h>

int func(int x);

int main(void)
{
int y,z;
printf("enter a number: \n");
scanf("%d",&y);
z=func(y);
printf("%d",z);

return 0;
}

int func(int x)
{
x++;/*非常奇怪的是,這裡無論改什成什麼,例如x=x+1 x=x*2 x=x-2 答案全是原先輸入的那個數字6,也就是說,這個x值傳回去還是原值。但唯有一個例外,就是x=x/2,除數,則它會有改變,例如輸入6,則本程式出來的答案就是3。怎會這樣?*/
}

robowang
2014-03-06, 07:27 PM
func 最後要加上 return x;

哈啦
2014-03-06, 07:52 PM
func 最後要加上 return x;

~yes

原來如此。但為何如果是x=x/2; 不用加return x;也有正確答案呢?

robowang
2014-03-06, 08:06 PM
你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果

哈啦
2014-03-06, 08:10 PM
你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果

原來如此。many thanks!:bow