2016-10-04 123 views
-2

想做一些奇特的格式化。我有幾行我想互相交流。獲取前兩行。打印出第二行中的字符乘以第一行中的整數。用星號字符分隔它們。最後一個字符打印後沒有星號。移至下一個整數和字符。在一個單獨的行上打印它們。爲整個列表做這個。我遇到的問題是在單獨的行上打印它們。例如:getline問題C++

5 
! 
2 
? 
3 
# 

希望的輸出:

!*!*!*!*! 
?*? 
#*#*# 

我的輸出:

!*!*!*!*!*?*?*#*#*#* 

代碼的塊。我從單獨的文本文件中讀取有關字符和數字的數據。所以我正在使用getline函數。

下面是代碼的一塊:

ifstream File; 
File.open("NumbersAndCharacters.txt") 
string Number; 
string Character; 
while(!File.eof(){ 
    getline(File, Number); 
    getline(File, Character); 
//a few lines of stringstream action 
    for (int i=0; i<=Number; i++){ 
     cout<<Character<<"*";}//end for. I think this is where 
          //the problem is. 
    }//end while 
File.close(); 
return 0; 

哪裏錯誤?它是循環嗎?或者我不明白getline?

在完成每個字符的乘法操作後,應該打印一個「endl」或「\ n」。

幾天前我問了這個問題。它不包含我的代碼。它被擱置。我編輯了這些問題,並在24小時前將其標記爲主持人審查。主持人或將其擱置的人沒有迴應,所以我重申了一遍。

+0

,你認爲' 「ENDL」 或 「\ n」'從何而來? –

+0

'std :: getline'函數不會將行尾字符放入輸入字符串中。 –

+1

另請注意:[爲什麼iostream :: eof在循環條件內被認爲是錯誤的?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

回答

0

如果讀取字符是最後的線,只是把「ENDL」,而不是「*」,因爲函數getline()不包括行返回:

while(!File.eof(){ 
     getline(File, Number); 
     getline(File, Character); 
    //a few lines of stringstream action 
     for (int i=0; i<=Number; i++){ 
      cout<<Character; 
      if (i == Number) 
       cout<<endl; 
      else 
       cout<<"*"; 
     } 
    }//end while 
+0

謝謝!你太棒了! –

0

getline不會在換行讀在文件的行尾。你也不要在任何地方添加一個換行符。如果你感到困惑,換行符是字符'\n'並代表換行符(在windows上它通常是「\ n \ r」,換行回車符)。

您需要添加自己的新行:

for (int i=0; i<=Number; i++){ 
    cout<<Character; 
    if (i != Number) { 
     cout << '*'; 
    } 
} 
cout << "\n";