2011-06-03 18 views
8

下面的代碼是寫不可讀的字符的文本文件:寫入double類型值到一個文本文件

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; 
} 

我希望看到書面:(提示請在文件中的實際數量

EDIT 看到下面的答案,我修改的代碼爲:

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。我想要完整的號碼。

編輯後通知大家: 的不可讀的字符是由於ofstream的的寫功能:

這是一個未格式化輸出功能

這句話是:http://www.cplusplus.com/reference/iostream/ostream/write/

+3

@Anisha - 默認是顯示6位數字,如果你想要更高的精度,你可以使用'myfile << setprecision(10)<< value;'來獲得數字的10位數。 – 2011-06-03 11:15:05

+2

@Bo Persson:要獲得數字中的10位數字,'std :: fixed'也是必要的,否則後面的零不會被打印出來。 – Nawaz 2011-06-03 11:21:37

+1

在這種情況下拋出一個像這樣的錯誤,除了錯誤之外,違反了嚴格的別名規則,所以你的代碼無法工作。 – 2011-06-03 12:35:29

回答

18

你爲什麼不簡單地做這個(在問題編輯後更新的答案):

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

現在,您可以看到寫入文件的實際數字。

請參閱std::setprecision的文檔。注意:您對包括<iomanip>頭文件,看看它是如何工作的:http://www.ideone.com/XNZjK

+0

看到上面的編輯。謝謝 – 2011-06-03 11:10:05

+1

@Anisha:現在就看。我更新了它。使用'std :: fixed'和'std :: setprecision(8)' – Nawaz 2011-06-03 11:13:07

+1

謝謝,現在它工作得非常出色!你能分辨出原來的代碼有什麼問題嗎? – 2011-06-03 11:17:38

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; 

使用的值ADRESS作爲參數strcat破壞你的籌碼,因爲strcat需要一個0結尾的C字符串作爲第一個參數(和實際分配空間)。

0

其他建議更好的方法,但如果你真的想這樣做的指針方式應該有管型轉換的char *加倍*反之亦然

#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; 
}