getline c ++的问题

时间:2016-10-04 16:12:37

标签: c++ getline

想做一些奇特的格式化。我有几行我想互相交流。得到前两行。打印第二行中的字符乘以第一行中的整数。用星号字符分隔所有这些。打印完最后一个字符后没有星号。移动到下一个整数和字符。在单独的行上打印它们。为整个列表执行此操作。我遇到的问题是在不同的行上打印它们。例如:

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?

它应该是打印&#34; endl&#34;或&#34; \ n&#34;在完成每个字符的乘法之后。

几天前我问了这个问题。它不包括我的代码。它被搁置了。我编辑了这些问题,并在24小时前将其标记为主持人审核。主持人或将其暂停的人都没有回复,所以我再次提出要求。

2 个答案:

答案 0 :(得分:0)

如果读取的字符是其最后一行,则只需输入&#34; endl&#34;而不是&#34; *&#34;因为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

答案 1 :(得分:0)

getline不会在文件行末尾的换行符中读取。您也不要在任何地方添加换行符。如果您感到困惑,换行符是字符'\n'并表示换行符(在Windows上通常为“\ n \ r”,换行符回车)。

您需要添加自己的换行符:

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