2012-11-16 105 views
2

當我遇到這個奇怪的錯誤時,我正在處理C++上的輸出格式。下面是用來打印數組中包含的信息我的代碼示例:C++輸出格式錯誤

int store; 
while(table[i]!=NULL) 
      { 
       store=table[i]->ReturnID(); 
       output<<"ID: "<<setw(9)<<store<<"\t"; // Export to a file channel 
       store=table[i]->ReturnTotalNumber(); 
       output<<" Total Number: "<<setw(5)<<store<<endl; 
       i++; 
      } 

雖然代碼編譯和打算在這裏工作是我output.txt的文件的一部分:

ID:  243 Total Number:  0 
ID:  312 Total Number:  0 
ID:  458 Total Number:  0 
ID:  700 Total Number:  0 
ID:  738 Total Number:  0 
..... 

的txt文件的第二行似乎總是失衡。其餘的都沒關係,不管他們有多少。我還注意到,將第一個setw(9)從9更改爲任何其他隨機數可修復該錯誤,但我無法解釋它。任何人對此有任何解釋?我的編譯器是GCC-G ++版本4.4.1,我的IDE是Code :: Blocks 10.05。

+0

您是否有可以重現輸出的簡短示例? – GWW

+0

而不是\你有沒有試過空格或別的東西?它的標籤多數民盟的失敗..不管什麼原因 –

+0

恐怕不是。這是一個關於倒置索引的大型項目的一部分,代碼太適合一個簡短的例子。謝天謝地,這不會導致任何嚴重的問題,因爲我只使用輸出文件進行調試,我很好奇爲什麼會發生這種情況。 –

回答

0

根據您要輸出的字符串,看起來該選項卡已不知所措。因此,你的任務是找出程序是否不是輸出,或者它是否沒有被你用來查看輸出的任何工具渲染。

我會將輸出發送到一個文件,然後使用任何十六進制轉儲實用程序,您必須檢查所述文件,以查看該選項卡是否實際存在。在Linux下(或搭配CygWin的Windows),你可以使用:

od -xcb fileNameYouCapturedTo 

如果你能建立它沒有被輸出,提高對glibchere的錯誤。如果它正在輸出,那麼你有兩種可能性。

首先,您可以針對您用來查看輸出的任何工具(無論是編輯器還是正在使用的終端程序)(因爲它看起來不是正確對待標籤)提出錯誤。

或者你可以完全拋棄標籤,只輸出一個空格。由於setw()因爲你已經排好了列,所以這裏幾乎不需要標籤。