2016-10-04 81 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";