[問題] 輸入串流字元判斷遇到+或-
開發平台(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
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
10/28 21:02, 6F
→
10/28 21:18, , 7F
10/28 21:18, 7F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章