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