【问题标题】:Appending CHAR to STR within a for-loop在 for 循环中将 CHAR 附加到 STR
【发布时间】:2017-08-20 09:28:35
【问题描述】:

我制作了一个简单的 C++ 控制台计算器,它可以完成它应该做的事情。完成计算后,它会询问用户是否要进行另一次计算。如果是,则循环重复,直到用户说不;如果没有,应用会显示“CLOSING”并在 2 秒后关闭。

我希望程序显示“CLOSING”,而不是静态的“CLOSING”消息,等待半秒显示“CLOSING.”,另一半“CLOSING..”,另一个“CLOSING...”,然后关闭退出(-1), 你明白了……

我已经完成了这个(使用 for 循环)但是每个 cout 都在不同的行上。 例如

关闭。

关闭..

关闭...

我希望它是一个静态的“CLOSING”,但是 '.'被追加了 3 次。

代码如下:

for (int a = 0; a < 3 ; a++)
        {
            Closing += ".";
            std::cout<<Closing<<std::endl;
            Sleep(500);

*sClosing 是我在 main() 上方定义为“CLOSING”的字符串。

所以重复我的问题:有没有办法让一行,一个“CLOSING”,只有一个“。”被附加(3 次)?

*如果这很明显,我很抱歉;我是 C++ 新手,但不是编程新手,所以请您解释一下 say '\f' 之类的目标/功能。

这也是我在 StackOverflow 上的第一篇文章,所以如果有什么不清楚或错误的地方(在格式等方面,请帮助菜鸟 ;-) *

【问题讨论】:

  • 只是一个小评论:虽然关闭时的一些动画一开始看起来很酷,但实际上它很快就会变得令人讨厌。但是你很快就会发现,然后你可以删除它。

标签: c++ string for-loop append


【解决方案1】:

在大多数控制台上,使用回车符 ('\r') 就可以做到这一点。

for(int i = 0; i < 4; i++) {
    std::cout << "Closing";
    for(int j = 0; j < i; j++) {
        std::cout << '.';
    }
    std::cout << '\r';
    Sleep(500);
}

如果您的程序不只是附加句点,而是希望它定期更改消息,这也非常有用。

for(int i = 0; i < 4; i++) {
    std::cout << "Closing";
    for(int j = 0; j < i; j++) {
        std::cout << '.';
    }
    std::cout << '\r';
    Sleep(500);
}
std::cout << "Now Closed!" << '\n';

您的另一个选择是找到一个可以让您对控制台进行动态编程的库,但这可能会使看起来相对简单的程序过于复杂。

【讨论】:

  • 我从没想过在 for 循环中使用 for 循环!非常感谢!
  • 只有一个问题,\r 到底是做什么的?我可以看到清除了该行,但如果有一个开放行 (\n) 会删除它,还是可以删除多行?
  • @madcode \r\n 一样将光标返回到行首,但与\n 不同的是,它不会跳转到下一个线。所以你可以写任何你想写的东西(只要它适合你控制台中单行的宽度),在它后面加上\r,然后你写的任何东西都会“覆盖”你已经写在该行的字符.如果您随后使用\n,您将跳转到下一行,并且上一行的字符将不再“可覆盖”(除非您使用动态控制台编程,这超出了本文的范围回答)。
  • @madcode 顺便说一句,\r 不会自行清除该行。如果您要编写类似std::cout &lt;&lt; "My line of data\rHey\r"; 的内容,则生成的文本将是Heyline of data。如果您需要空白行,请写出足够的空格字符以填充控制台的宽度。
  • 感谢您的澄清,我一定会再次使用这个很棒的网站!
【解决方案2】:

您必须删除添加换行符的std::endl

std::cout << "CLOSING";
for (int a = 0; a < 3 ; a++)
{
    Sleep(500);
    std::cout << ".";
}
std::cout << std::endl;

【讨论】:

  • 不。这样你会得到CLOSING CLOSING.CLOSING..
猜你喜欢
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2021-06-24
  • 2017-10-21
相关资源
最近更新 更多