C++控制台输出出现异常%字符,添加endl后消失的原因咨询
问题描述
我编写了如下主函数:
int main() { char j[] = "abc"; print(j); }
当print函数按以下方式定义时:
void print(const char *cp) { if (cp) { while (*cp) { int i = *cp; cout << *cp; // cout << *cp << endl; cp++; } } }
控制台输出末尾会出现类似%的异常字符,已确认该字符不是命令提示符的一部分,即使更换提示符后仍会出现。
但如果修改print函数,将输出语句改为带endl的版本,这个异常字符就消失了:
void print(const char *cp) { if (cp) { while (*cp) { int i = *cp; // cout << *cp; cout << *cp << endl; cp++; } } }
原因说明
这个%是zsh等shell环境的特殊标记,用来提示当前输出行没有以换行符结尾。当程序只输出abc却没有输出换行符时,shell会在输出末尾添加该标记,同时光标停在abc的末尾而非下一行开头。
endl的作用包含两点:一是输出换行符\n,二是强制刷新输出缓冲区。添加endl后,程序输出的内容以换行结尾,shell便不会额外添加这个标记字符。
如果不想使用endl(强制刷新缓冲区可能影响性能),可以仅输出换行符来达到同样效果:
cout << *cp << '\n';
这样既可以让输出以换行结尾,避免shell添加%标记,又不会强制刷新缓冲区。
内容的提问来源于stack exchange,提问作者Guichi
相关产品推荐
相关产品推荐

