1
該代碼被用來創建一個功能正常的計算器程序。整個事情有點長,所以我不會進入到這一切,但這裏的一個部分:爲什麼你需要返回一些東西到輸入流?
Token Token_stream::get()
{
if (full) { // do we already have a Token ready?
full = false; // remove Token from buffer
return buffer;
}
char ch;
cin >> ch; // note that >> skips whitespace (space, newline, tab, etc.)
switch (ch) {
case ';': // for 「print」
case 'q': // for 「quit」
case '(': case ')': case '+': case '–': case '*': case '/':
return Token{ch}; // let each character represent itself
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // put digit back into the input stream
double val;
cin >> val; // read a floating-point number
return Token{'8',val}; // let ‘8’ represent 「a number」
}
default:
error("Bad token");
}
}
爲什麼你需要把章回輸入流?難道你不能只使用ch輸入而不是利用val的全新變量?
呃,對不起,我還是有點困惑。當你輸入123時,只有'1'會被讀入ch?或者它會繼續,因爲讀數爲1,將其放回,讀取爲2,將其放回等等。在那種情況下,爲什麼我不能完全消除0-9的情況並依賴cin >> val? – blueyfooey
@blueyfooey'當你輸入123時,只有'1'會被讀入ch?'是的。從那時起,它知道下一個標記是一個數字,所以它讀入'123'。之後,通過讀取數字,輸入已經超過了'123'。然後它會處理接下來的任何事情。 – Obicere
好的,這是有道理的。但是,在那個時候使用cin >> val會不會更簡單呢? – blueyfooey