C++使用setw控制cout输出时冒号不对齐位置偏移如何解决
问题原因
你第一行将两个换行符\n\n放在了setw(70)作用的输出字符串内,setw计算宽度时会把这两个换行符算入字符串总长度,导致1. Monthly salary后面填充的空格数比第二行少2个,最终冒号位置向左偏移。
解决方法
将需要单独换行的内容从setw控制的输出串中剥离,换行单独输出,保证所有需要对齐冒号的前置文本,在调用setw时传入的字符串长度仅为当前行需要显示的文本长度,两者填充的空格数一致即可对齐。
修改后代码
#include <iostream> #include <iomanip> // 必须引入该头文件才能使用setw using namespace std; int main() { double monthsal; char kwsp; // 换行单独输出,不要放在setw控制的字符串内 cout << "\n\n"; cout << setw(70) << left << "1. Monthly salary"; cout << ": RM"; cin >> monthsal; cout << "2. Any KWSP deduction?\n"; cout << setw(70) << left << " Type 'Y' for Yes and 'N' for No"; cout << ": "; cin >> kwsp; return 0; }
补充说明
后续如果还有其他需要对齐的行,都遵循相同规则:换行、制表符这类特殊字符单独输出,仅把当前行需要显示的纯文本内容放在setw的下一个输出项即可。
内容的提问来源于stack exchange,提问作者given159
相关产品推荐
相关产品推荐

