《C程序設計語言》中63-67頁提到了逆波蘭表示法其中它舉了一個使用逆波蘭表示法來實現計算器程序的例子,其中有個getop()函數,代碼如下,我對這個函數有點看法與疑問,都寫在代碼的右邊,請教大神解答一下,拜謝!#include<ctype.h>int getch(void);????? //取一個字符(可能是壓回緩沖器的字符)void ungetch(int);??? //把字符壓回到輸入中int getop(char s[]){?int i,c;?while((s[0]=c=getch())==' '||c=='\t')? //從取的字符中跳過空格或制表符?????????1, 為什么要把取到的字符賦值給s[0]呢?后??;??????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 面s[0]不是也要被覆蓋嗎??s[1]='\0';?if(!isdigit(c)&&c!='.')????? //不是數,返回字符??return c;?i=0;?if(isdigit(c))??while(isdigit(s[++i]=c=getch()));?? //收集整數部分??????????????????????????????????????? 2,在while語句前面是不是要先把當前的c???;????????????????????????????????????????????????????????????????????????????????????????????????????????????????????賦值給s[0]再收集整數部分呢?????if(c=='.')??while(isdigit(s[++i]=c=getch()));? //收集小數部分???;?s[i]='0';?if(c!=EOF)??ungetch(c);? //將超前多讀入的輸入中的字符壓回輸入中?return NUMBER;}#define BUFSIZE 100char buf[BUFSIZE];? //用于ungetch函數的緩沖區int bufp=0;???????? //緩沖區中下一個空閑位置int getch(void){?return (bufp>0)?buf[--bufp]:getchar();???? //如果緩沖區不為空,則取緩沖區的值}void ungetch(int c){?if(bufp>=BUFSIZE)??printf("ungetch:too many characters\n");? //如果緩沖區滿了,報錯?else??buf[bufp++]=c;???????????????????????????? //如果緩沖區未滿,將字符壓回緩沖區}
關于逆波蘭表示法中的getop()函數
qq_不睡覺的怪叔叔_0
2016-08-25 19:46:10