網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #1  
舊 2014-03-06, 06:10 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設 有關遞增的值的問題

第一個是基本的遞增函數,如果使用者輸入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。怎會這樣?*/
}
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-03-06, 07:27 PM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

func 最後要加上 return x;
回覆時引用此篇文章
  #3  
舊 2014-03-06, 07:52 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設

引用:
作者: robowang 查看文章
func 最後要加上 return x;


原來如此。但為何如果是x=x/2; 不用加return x;也有正確答案呢?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-03-06, 08:06 PM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果
回覆時引用此篇文章
  #5  
舊 2014-03-06, 08:10 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設

引用:
作者: robowang 查看文章
你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果
原來如此。many thanks!
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 06:11 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.