[問題] 輸入串流字元判斷遇到+或-

看板C_and_CPP (C/C++)作者 (~碗粿~)時間13年前 (2012/10/28 20:01), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 關於C++的stream會自動判斷資料格式予以轉換,但是在轉成字元的時候, 我自己的測試是要判斷一行輸入(一個運算式)是否為數字或符號,如果是數字, 就把他存到int中,如果是符號,就把他存到char中。 我是利用stringstream來實做的,作法是先預設讀入一個數字,如果串流錯誤, 則清除錯誤,不清除緩衝區,並且改成讀入字元。 可是我發現當讀取失敗時,重新讀取字元,如果遇到的字元恰好是 + 或 - 那麼+ 或 - 會被忽略,並且直接讀取下一個字元。 我猜想可能是剛好 + 或 - 會被誤判成數字,不知是否有板友知道是什麼原因呢? 餵入的資料(Input): input1:* 8 input2:+ 8 預期的正確結果(Expected Output): output1:* output2:+ 錯誤結果(Wrong Output): output1:* output2:8 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/tRuKuoTp code不長我就直接寫在下面 #include <iostream> #include <sstream> #include <string> using namespace std; int main() { char c; int n; string s; getline(cin,s); stringstream ss(s); ss >> n; if(ss.fail()){ ss.clear(); ss >> c; } cout << c; } 補充說明(Supplement): 先謝謝各位了 m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.24.36

10/28 20:09, , 1F
應該是因為"只看到 + 或 - 不知道後面有沒有跟數字
10/28 20:09, 1F

10/28 20:10, , 2F
可以配成正幾或負幾所以繼續讀下去" 的樣子
10/28 20:10, 2F
我也覺得是這樣子,但是我猜想如果都知道要讀char了,應該要直接吃下去不是嗎? 像是如過input:+ - output結果會是:- 有點讓人匪夷所思,因為如果是單純沒有失敗的情況下 char c; cin >> c; 的確就只會吃一個字元 ※ 編輯: thustow 來自: 140.113.24.36 (10/28 20:15)

10/28 21:00, , 3F
噢不是的 我這句話是指在 ss >> n; 時的判斷
10/28 21:00, 3F

10/28 21:01, , 4F
也就是我要讀個數字 讀個正負號進來還不構成不是數字的理由
10/28 21:01, 4F

10/28 21:01, , 5F
然後讀到那個空白才發現啊不是數字 所以斷在那裡回傳
10/28 21:01, 5F

10/28 21:02, , 6F
程式絕對不會知道你之後要他讀一個 char
10/28 21:02, 6F

10/28 21:18, , 7F
喔喔,我懂了,Thanks LPH66!
10/28 21:18, 7F
文章代碼(AID): #1GZHwmhZ (C_and_CPP)
文章代碼(AID): #1GZHwmhZ (C_and_CPP)