C++如何实现输入与输出阶段的小数点位置对齐?
对齐方案
你输出部分已经用setw(8)预留8位数值宽度+fixed+setprecision(2)固定两位小数,已经实现了小数点位置统一。输入部分对齐只需要做两处调整即可:
- 统一所有左侧提示文本的宽度,让美元符号$在输入、输出阶段都处于同一列
- 输入完成后回写当前行,将用户输入的原始内容替换为格式化后的标准样式,即可保证输入数值的小数点和后续输出完全对齐
完整修改后代码
#include <iostream> // 原代码缺少输入输出必要头文件,补充后才能正常运行 #include <iomanip> using namespace std; int main() { // 全局设置固定两位小数,保证输入输出格式统一 cout << setprecision(2) << fixed; float number_books; float cost_book; float total_order; float total_shipping; float total_order_shipping; // 输入阶段 // setw(24)固定左侧提示文本宽度,left设为左对齐 cout << left << setw(24) << "Enter number of books to order:"; cin >> number_books; // \r是回车符,回到当前行首,重写整行为格式化后的内容,替换用户原始输入 cout << "\r" << left << setw(24) << "Enter number of books to order:" << setw(8) << number_books << endl; cout << left << setw(22) << "Enter cost per book:" << "$ "; cin >> cost_book; cout << "\r" << left << setw(24) << "Enter cost per book:" << "$" << setw(8) << cost_book << endl; // 计算阶段 total_order = number_books * cost_book; total_shipping = total_order > 50 ? 0 : 25.00f; total_order_shipping = total_shipping + total_order; // 输出阶段 cout << left << setw(24) << "Book order total:" << "$" << setw(8) << total_order << endl; cout << left << setw(24) << "Shipping total:" << "$" << setw(8) << total_shipping << endl; cout << left << setw(24) << "Order & Shipping total:" << "$" << setw(8) << total_order_shipping << endl; system("pause"); return 0; }
如果暂时不想处理输入时的实时对齐,也可以只调整输入提示语的宽度,保证$和输出部分对齐即可,更适合新手快速实现:
// 简化版输入部分,不需要回写行 cout << left << setw(24) << "Enter number of books to order:"; cin >> number_books; cout << left << setw(22) << "Enter cost per book:" << "$ "; cin >> cost_book;
内容的提问来源于stack exchange,提问作者gucci_S
相关产品推荐
相关产品推荐

