c++ - 字符串不会计算第一部分

标签 c++ string cout

我正在用 C++ 编写一个游戏,我希望它逐个字符地输出一个字符串,并使用 Sleep() 函数减慢输出速度。字符串是:

string output = "It is Super Effective!" + '\n';  

当我尝试 cout << output它返回 "r Effective"没有换行
显示功能的代码是

void textDisplay(string s){
    s = " " + s;
    for (int i = 0; i < s.size(); i++){
        char c = s[i];
        cout << c;
        Sleep(20);
    }
}

最佳答案

因为 “它 super 有效!” + '\n' 被解释为指向 C 字符串的指针加上字符 \n 的整数值,在 ASCII 中为 10。这发生在分配给 C++ 字符串之前

您会看到,如果您从 C 字符串的开头算起十个字符,您确实会在 r 处结束。

所以这里是正在发生的事情,详细和顺序:

  • 表达式 “It is Super Effective!” 被解释为指向初始 I 字符(C 字符串)的字符指针。
  • 然后将 10(\n 的整数值)加到它上以获得指向 r 的指针(仍然是 C 字符串)。<
  • 该 C 字符串 “r Effective!” 然后用于构造 C++ 字符串。

图形形式:

base +  0: | I  | -------+
base +  1: | t  |        |
base +  2: |    |        |
base +  3: | i  |        |
base +  4: | s  |        |
base +  5: |    |     Add ten
base +  6: | S  |        |
base +  7: | u  |        |
base +  8: | p  |        |
base +  9: | e  |        |
base + 10: | r  | <------+
base + 11: |    |
base + 12: | E  |
  :
base + 21: | !  |
base + 22: | \0 |

您可以更改它以将字符添加到 C++ 字符串而不是 C 字符串:

string output = "It is Super Effective!";
output += '\n';

但我不完全确定你为什么不这样做:

string output = "It is Super Effective!\n";

您可能需要注意的另一件事。有可能只有在发送换行符时才会将字符刷新到标准输出,这意味着您似乎会在一次点击中获得整个字符串,比您预期的要晚七分钟左右出现的第一个字符。

如果发生这种情况,请记住在每个字符后刷新流:

cout << c << flush;

关于c++ - 字符串不会计算第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30471775/

相关文章:

c++ - 按以下方式设置引用是否安全

c++ - 混合 cout 和 printf 以获得更快的输出

c++ - cout 的缓冲区如何工作?

c++ - Cmake 奇怪的错误 : Syntax Error Unexpected Token ('

c++ - dll 函数名与已有的 MFC 函数名相同

c++ - SEH StackOverflow 异常 - 真的无法捕获吗?

c - memset 无法将字符串设置为零并进入段错误

javascript - 正则表达式删除列 "|"字符

javascript - 如何使用 jQuery 删除字符串中的句点

c++ - 知道将哪个ostream传递给函数c++