【问题标题】:Issues with getline c++getline C++ 的问题
【发布时间】:2016-10-04 16:12:37
【问题描述】:

想做一些花哨的格式化。我有几行要相互交互。获取前两行。打印出第二行中的字符乘以第一行中的整数。用星号字符分隔它们。打印最后一个字符后没有星号。移动到下一个整数和字符。将它们打印在单独的行上。对整个列表执行此操作。我遇到的问题是将它们打印在单独的行上。示例:

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 小时前将其标记为版主审查。版主或搁置它的人没有回应,所以我重新询问。

【问题讨论】:

标签: c++ getline


【解决方案1】:

如果读取的字符是其行的最后一行,只需输入“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

【讨论】:

  • 谢谢!你太棒了!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多