2013-11-23 99 views
-2

我正在嘗試寫入文件,並且遇到了字符串不能寫入的問題。字符串將不會正確寫入輸出

從我已經弄清楚,我的字符串將只打印,如果我在它後面放置'\ n'。問題是我試圖將它寫入一個文件,並且它必須與其他信息一致。

樣品的什麼,我試圖讓我的文件看起來像:

1111 Last, First 10  20  $30.00 

這實際寫道:

1111    10  20  $30.00 

這是我曾嘗試,它將只打印最近3項目。如果我把一個 '\ n' 後的getName()然後打印樣樣精:

ofstream outputFile("somefile.txt"); 
    outputFile << std::setw(10) << getAccount() 
       << std::setw(10) << getName() // returns a string 
       << std::setw(10) << getNum1() 
       << std::setw(10) << getNum2() 
       << std::setw(10) << getTotal() << endl; 

我已經打過電話沖洗後的getName()但沒有奏效

outputFile.flush() 

我應該分開存儲最後的名字。

string getName() const 
    { 
     string full = last + ", " + first; 
     return full; 
    } 
+0

實際問題是什麼?你想*打印*或寫入文件? 「它沒有用」是什麼意思?你究竟做了什麼?你期望什麼?發生什麼了?這聽起來像你想'outputFile << getAccount()<< getName()<< getNum1()<< getNum2()<< getTotal()<< std :: endl;''也許。 –

+0

你必須先輸出文件.open(「somefile」)? – cen

+0

我更新了我的問題,使其更清晰一些。 問題是它不會顯示名稱的字符串,除非我在getName()後面放置一個'\ n'。 – mrT

回答

1

我假設你實際上指定了輸出文件的名字,例如:

std::ofstream outputFile("some-file.txt"); 

假設這是排序的,有從<iomanip>看看std::setw(n),並確保您的輸出被莫名其妙地分開。例如,您可能需要使用

outputFile << std::setw(8) << getAccount() << ' ' 
      << std::setw(20) << getName() << ' ' 
      << std::setw(6) << getNum1() << ' ' 
      << std::setw(6) << getNum2() << ' ' 
      << getTotal() << '\n'; 

...如果你真的想確保輸出立即寫入到文件,而不是緩衝:

outputFile << std::flush; 

(這相當於std::outputFile.flush();但使用cuter語法)。

基於上述意見,我會你結束了含有'\r'名右底:這樣一來,它看起來好像沒有什麼,但實際上的字符只是後來來了個字符覆蓋。您可以使用刪除回車符

str.erase(std::remove(str.begin(), str.end(), '\r'), str.end()); 
+0

我也嘗試過,沒有成功。 – mrT