(看了一下上次更新的日期,6月3日...) 先說一個(gè)問題,之前我們對(duì)于變量賦值是這樣寫的: 事實(shí)上,也有類似于str = "hello world"類似的語句,這時(shí) "hello world"中有空格,所以不可以這樣寫,之前寫過一個(gè)get_string函數(shù),就是用于讀入一整行的,我們用它就好了。 我們繼續(xù)。實(shí)際上,變量的賦值語句中,等號(hào)的右邊還可以是一個(gè)表達(dá)式。表達(dá)式的求值比較復(fù)雜,我們先實(shí)現(xiàn)最簡(jiǎn)單的,只包含一個(gè)運(yùn)算符的。例如1+2,3*16。同時(shí),表達(dá)式中還可以出現(xiàn)變量,例如a*3,x+y等等。 我們首先需要對(duì)getnum函數(shù)進(jìn)行修改。字符串轉(zhuǎn)數(shù)字的功能我們就不交給getnum做了,把函數(shù)名改為getnum_sub,讓這樣函數(shù)進(jìn)行字符串轉(zhuǎn)數(shù)字,然后表達(dá)式求值交給getnum做。 代碼中注釋應(yīng)該寫得比較清楚了。 首先先對(duì)getnum_sub進(jìn)行修改。如果是變量,返回變量的值。否則返回這個(gè)數(shù)字。 getnum中,先通過指針p找到運(yùn)算符的位置。然后把前面和后面的數(shù)據(jù)分別提取出來,進(jìn)行計(jì)算。我們把p設(shè)置為'\0',s后面到p-1就是第一個(gè)數(shù),p+1到末尾就是第二個(gè)數(shù)。 我們執(zhí)行如下的語句,會(huì)發(fā)生什么? 什么?停止工作?...?。≡瓉硗浉某蒰etnum_sub了! 這下正常了。咦?怎么一旦只出現(xiàn)一個(gè)數(shù),就又出問題了? 看來如果只有一個(gè)數(shù),就找不到運(yùn)算符,甚至?xí)?shù)組越界。因此,如果沒有運(yùn)算符,只出現(xiàn)一個(gè)數(shù)要特判。 這下正常了。完,下期再見。
|
|