code.club

 找回密碼
 立即註冊
搜索
查看: 7356|回復: 1
打印 上一主題 下一主題

請教一下有關 if 和 while 的不同?

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2015-1-8 20:29:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 enter 於 2015-1-8 21:34 編輯

有一題是要寫一遞迴函數使其可以在螢幕上以每次一個字元的方式顯示一個輸入的字串。

書上解答如下:
char str[80];
char *p;
p=str;
printf("enter a string:\n");
gets(str);
test(p);

return 0;
}

char test(char *s)
{
if(*s)
{
printf("%c\n",*s);
test(s+1); //這裡要放進if程式區中是因為,唯有*s還成立,才要再去test()一次。如果不放在if區中,那就算*s已為0,那下面還是要繼續test(s+1)下去。
}
}

而我自己寫時,一開始是用while而非if。但跑的結果是錯的,使用while的話,會一直無限跑出最後一個字元,直到當機。
但邏輯上來說,在此處使用 if 或 while 似乎並無功能上的不同啊?

請先進指導,謝謝先。
回復

使用道具 舉報

沙發
發表於 2015-1-8 21:45:23 | 只看該作者
if() {......}表示如果某條件成立,則執行{}內的動作。然後game over。

while() {.....}表示當某條件成立,則執行{}內的動作,然後再check while()是否還成立,若是,則繼續{}的動作。因此本題中如果用while(*s),則{}裡面的test(s+1)就算全都執行完畢,再回到第一層的while()它依然還是成立,因它裡面的*s並未變動所致,是它{}裡面的test(s+1)以及之後的test(s+1)才有碰到*s==0的情形。第一層沒有變化,最終還是要回過頭來執行它,結果它就不斷重覆{}的動作而導致跑不完。
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-12-4 01:51 , Processed in 0.095343 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表