#include <ctype.h>int getch(void);void ungetch(int);/*getop函數(shù):獲取下一個運算數(shù)或數(shù)值操作數(shù)*/int getop(char s[]){int i,c;while((s[0]=c=getch())==' '||c=='\t');s[1]='\0';if(!isdigit(c) && c!='.') /*收集整數(shù)部分*/return c;i=0;if(isdigit(c))/*收集小數(shù)部分*/while(isdigit(s[++i]=c=getch()));if(c=='.')while(isdigit(s[++i]=c=getch()));s[i]='\0';if(c!=EOF)ungetch(c);return NUMBER;}當 if(isdigit(c))這個條件為真的時候,執(zhí)行下面的循環(huán)語句,但是這個時候c中存放的就是一個數(shù)字了。是先付給數(shù)組呢?還是要再調用一次這個getch呢???我也弄不明白是怎么個執(zhí)行順序才可以先收集整數(shù)部分,在收集小數(shù)部分,而且小數(shù)點事在那個循環(huán)語句當中放到數(shù)組當中的呢?求高手給指點。
2 回答

長風秋雁
TA貢獻1757條經(jīng)驗 獲得超7個贊
先調用getch,賦值運算符是又結合的所以c是和右邊的賦值運算符結合,s[++i]=c=getch()等價于s[++i]=(c=getch()),所以上面是先計算s[++i]=的右邊部分,即(c=getch()), 這個右邊部分又包含賦值表達式,所以先計算該賦值運算符的右邊部分即getch()。所以整個復合表達式的計算順序是先計算getch(),再將返回值賦給c,再將c的值賦給s[++i]。
- 2 回答
- 0 關注
- 219 瀏覽
添加回答
舉報
0/150
提交
取消