2011-06-03 19 views
8

नीचे कोड पाठ फ़ाइल में पढ़ने योग्य नहीं वर्ण लिख रहा है के लिए एक डबल प्रकार मान लेखन:।एक पाठ फ़ाइल

int main() 
{ 
    ofstream myfile ("example.txt"); 

    if (myfile.is_open()) 
    { 
     double value  = 11.23444556; 
     char *conversion = (char *)&value; 
     strcat (conversion, "\0"); 

     myfile.write (conversion, strlen (conversion)); 
     myfile.close(); 
    } 

    return 0; 
} 

मैं वास्तविक संख्या फ़ाइल :(कृपया संकेत में लिखा देखना चाहता हूँ

int main() 
{ 
    ofstream myfile ("example.txt"); 

    if (myfile.is_open()) 
    { 
     double value  = 11.23444556; 

     myfile << value; 
     myfile.close(); 
    } 

    return 0; 
} 

यह putput पैदा करता है:

संपादित नीचे दिए गए उत्तर को देखकर, मैं के रूप में कोड को संशोधित 11.2344 जबकि वास्तविक संख्या 11.23444556 है। मुझे पूरा नंबर चाहिए।

हर किसी को सूचित करने के लिए पद से संपादित करें:

यह एक अस्वरूपित उत्पादन समारोह

इस उद्धरण से है: http://www.cplusplus.com/reference/iostream/ostream/write/

अपठनीय वर्ण ofstream करने के समारोह में लिखने की वजह से कर रहे हैं
+3

@Anisha - डिफ़ॉल्ट 6 अंक प्रदर्शित करने के लिए है, यदि आप उच्च परिशुद्धता चाहते हैं, तो आप नंबर में 10 अंक प्राप्त करने के लिए 'myfile << setprecision (10) << मान;' कर सकते हैं। –

+2

@ बो पर्सन: संख्या में 10 अंक प्राप्त करने के लिए, 'std :: fixed' भी आवश्यक है, या अन्य पिछला शून्य मुद्रित नहीं होगा। – Nawaz

+1

इस मामले में गलत के अलावा, इस तरह एक डबल कास्टिंग, सख्त एलियासिंग नियम का उल्लंघन करता है, इसलिए एक तरफ या दूसरा आपका कोड काम नहीं करेगा। –

उत्तर

18

आप ऐसा क्यों नहीं करते (प्रश्न में संपादन के बाद अद्यतन उत्तर):

myfile << std::fixed << std::setprecision(8) << value; 
myfile.close(); 

अब, आप फ़ाइल में लिखी गई वास्तविक संख्या देख सकते हैं।

std::setprecision के दस्तावेज़ देखें। ध्यान दें कि आप <iomanip> हेडर फाइल शामिल करने के लिए है, और देखें कि यह कैसे काम करता है: http://www.ideone.com/XNZjK

+0

उपरोक्त que संपादन देखें। धन्यवाद –

+1

@Anisha: इसे अभी देखें। मैंने इसे अपडेट किया। 'Std :: fixed' और' std :: setprecision (8) ' – Nawaz

+1

का प्रयोग करें धन्यवाद, अब यह शानदार ढंग से काम करता है! क्या आप बता सकते हैं कि मूल कोड में क्या गलत था? –

3

यह आसान यहाँ धारा ऑपरेटरों का उपयोग करने के लिए है:

#include <iostream> 
#include <fstream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    ofstream myfile ("example.txt"); 

    if (myfile.is_open()) 
    { 
     double value  = 11.23444556; 

     myfile << value; 
     myfile.close(); 
    } 

    return 0; 
} 

आप देता है कि आप क्या चाहते।

0

आप इस तरह दायर करने के लिए मूल्य लिख सकते हैं:

myfile << value; 

मूल्य का पता पैरामीटर strcat अपने ढेर भ्रष्ट के रूप में, strcat के बाद का उपयोग करते हुए पहले तर्क के रूप में 0-समाप्त सी-स्ट्रिंग की उम्मीद है (और वास्तव में आवंटित अंतरिक्ष)।

0

दूसरों बेहतर तरीके का सुझाव दिया, लेकिन अगर आप वास्तव में इसे सूचक तरीके से करना चाहते हैं वहाँ डाले चार * दोगुना करने के लिए * कन्वर्ट करने के लिए किया जाना चाहिए और इसके विपरीत

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstring> 
using namespace std; 

int main() 
{ 
    ofstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    double value  = 11.23444556; 
    char  *conversion = reinterpret_cast<char *>(&value); 
    strcat (conversion, "\0"); 
    //myfile.write (*conversion, strlen (conversion)); 
    myfile << *(reinterpret_cast<double *>(conversion)); 
    myfile.close(); 
    } 
    return 0; 
} 
संबंधित मुद्दे