我已經花像一在這個例子中,每次我從這個代碼得到錯誤Unable to read cin
與ios_base::iostate
等於failbit
:方面的GET_TIME一直未能
#include "dates.h"
#include <iostream>
#include <ctime>
#include <locale>
#include <sstream>
#include <iterator>
using namespace std;
void trasnlateDate(istream&in, ostream&out){
const time_get<char>& dateReader = use_facet<time_get<char> >(in.getloc());
ios_base::iostate state = static_cast<ios_base::iostate>(0);
istreambuf_iterator<char> end;
tm t;
dateReader.get_date(in, end, in, state, &t);
if(state == static_cast<ios_base::iostate>(0) || state == ios_base::eofbit){
const time_put<char>& dateWriter = use_facet<time_put<char> >(out.getloc());
char fmt[] = "%x";
if(dateWriter.put(out, out, out.fill(), &t, &fmt[0], &fmt[2]).failed())
cerr << "unable to write to output stream.\n";
}else{
cerr << "Unable to read cin.\n";
}
}
int main(){
locale::global(locale(""));
cin.imbue(locale("en_US.utf8"));
cout.imbue(locale("de_DE.utf8"));
trasnlateDate(cin, cout);
}
一如既往,GCC 4.4.3在Ubuntu 10.4 x64
你可以使用'ios_base :: goodbit'(或'ios :: goodbit')而不是'state == static_cast(0)'...儘管被命名爲「bit」,但它是一個用詞不當, 'goodbit'爲零。 –
Potatoswatter
2010-10-04 18:11:25
那麼...你通過'cin'給了什麼輸入? – Potatoswatter 2010-10-04 18:14:49
輸入是2/2/2005 – Sambatyon 2010-10-04 18:21:52