2017-07-25 50 views
-1

我讀文件字符由字符閱讀內容:前導0沒有得到從文件

的文件有:

000001111100000 

當我使用此代碼讀取

int content;// converting to char will result in proper output. 
std::ifstream fin; 
fin.open("zero_one"); 
fin>>content; 
while (!fin.eof()) 
{ 
    std::cout<<content; 
    fin>>content; 
} 
fin.close(); 

我得到的輸出爲:1111100000(前導零不存在),但後面的零存在。

問題是:因爲我使用>>運算符來讀取,爲什麼我不能在輸出中得到前導零,而當我在輸出中得到尾隨零時。

此外,如果我將int轉換爲charcontent變量,則輸出與文件內容相同。這是爲什麼?據我所知,charint之間唯一的區別是變量的字節大小。

+4

'int'只存儲數字的值。 '000001111100000'和'1111100000'具有相同的值。如果實際字符表示對於用例很重要,則需要將該數字作爲字符串讀取。 –

+2

「據我所知,char和int之間的唯一區別是變量的字節大小。」這對於int和char類型是正確的,但對於這些類型,>>輸入運算符的重載方式不同。 –

+0

這是一個鏈接:https://stackoverflow.com/questions/30580903/how-can-i-preserve-leading-zeros-when-reading-a-number-and-printing-it-later –

回答

3

如果contentint,它讀取數據作爲整數:你得到一個int與價值1111100000.如果contentchar,它分別讀取每個字符。

如果在while循環中表示std::cout<<content<<'\n';而不是std::cout<<content;,則可以看到差異。那麼如果contentint,您將看到一行包含1111100000,但如果它是char,您將看到15行,每個輸入字符一行。

如果你把輸入文件的每個字符之間的空間,他們會被解讀爲獨立int S和結果將是相同的,但仍然是一個重要的區別:char S的值不char(0)char(1),但分別爲'0''1'0x300x31),相應數字的ASCII值。另一方面,int實際上將是01