【问题标题】:Formatting Output c++格式化输出 c++
【发布时间】:2026-02-07 02:45:01
【问题描述】:

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

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”。

感谢大家的回复!

【问题讨论】:

    标签: c++ cout


    【解决方案1】:

    您尚未显示您的代码,但这里的问题似乎是您每次打印字符时都忘记添加新行。例如,您可能已经这样做了:

    std::cout << "!";
    

    好吧,在这种情况下,您忘记添加新行 ('\n'),因此您有两个选择:首先自己插入新行:

    std::cout << "! \n";
    

    std::endl;

    std::cout << "!" << std::endl;
    

    对于两者的比较,请参阅herehere。如果没有进一步的描述,或者更重要的是您的代码似乎无法正常运行,我们无法提出建议或解决您的问题。

    【讨论】:

    • 这并没有解决第二个问题,多余的尾随 * 字符。
    • @IInspectable 很好,他没有显示代码,所以这是一个完整的预测。我猜他是使用 for 循环打印的,但他不小心比需要的迭代次数多了一次?但如果他不显示代码,我怎么知道是什么导致了“多余的尾随 * 字符”?
    • 你不应该知道的。你也不应该回答问题,这是题外话。