2012-09-11 15 views
7

यह पता लगाने के लिए कि क्या atof या _wtof स्ट्रिंग को डबल में बदलने में विफल रहता है? लेकिन यह जांचने की कोशिश करके नहीं कि परिणाम अलग-अलग रूप 0.0 है क्योंकि मेरा इनपुट 0.0 हो सकता है। धन्यवाद!यह पता लगाने के लिए कि क्या atof या _wtof विफल रहता है?

+2

आपने अभी पता लगाया है कि एटीओएक्स फ़ंक्शंस का उपयोग क्यों खराब है। – PlasmaHH

उत्तर

11

atof का उपयोग न करें। इसके बजाय, strtod उपयोग करते हैं, <cstdlib> से, और भी errno जाँच <cerrno> से:

// assume: "char * mystr" is a null-terminated string 

char * e; 
errno = 0; 
double x = std::strtod(mystring, &e); 

if (*e != '\0' || // error, we didn't consume the entire string 
    errno != 0) // error, overflow or underflow 
{ 
    // fail 
} 

सूचक e अंक अतीत पिछले भस्म चरित्र एक। किसी भी वर्णों का उपभोग करने के लिए आप e == mystr पर भी देख सकते हैं।

, wchar_t -strings के साथ काम करने <cwstring> से भी std::wcstod नहीं है।

सी ++ 11 में आप भी है std::to_string/std::to_wstring, <string> से है, लेकिन मेरा मानना ​​है कि यदि रूपांतरण, विफल रहता है जो एक वांछनीय विफलता मोड जब बाहरी डेटा के साथ काम कर नहीं किया जा सकता है कि एक अपवाद फेंकता है।

+0

@TerranceCohen: नहीं। (लेकिन आप अभी भी पकड़ने के लिए 'errno' जांचना चाहते हैं- और अंडरफ़्लो।) –

1

atof का उपयोग करके, आप नहीं कर सकते। लेकिन चूंकि यह सी ++ है, मेरा सुझाव है कि आप std::stringstream का उपयोग करें और operator >> को double पर लागू करने के बाद operator ! के साथ जांचें।

संबंधित मुद्दे