我正在用 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/