如何为C++摄氏度转华氏度程序添加行编号并实现数字居中对齐
解决方案
你提供的原始代码存在重复定义main函数的语法错误,位于列表输出模块的int main();行属于冗余代码,修改前需要先删除该行及多余的大括号声明。
完整修改后代码
#include <stdio.h> #include <iostream> #include <iomanip> #include <cstdlib> #include <clocale> #include <string> using namespace std; // 辅助函数:计算数字转指定精度字符串后的长度,用于居中对齐计算 int get_num_str_len(double num, int decimal) { if (decimal == 0) return to_string((int)num).length(); string str = to_string(num); return str.substr(0, str.find('.') + 1 + decimal).length(); } int main(){ const int COL_WIDTH_IDX = 6; const int COL_WIDTH_C = 10; const int COL_WIDTH_F = 12; // 表格输出模块 setlocale(LC_ALL, ""); system("color F0"); printf("\t温度转换表输出\t"); printf("\n----------------------------------------------------\n"); // 表头居中处理 int pad_left = (COL_WIDTH_IDX - 2)/2; printf("|%*s序号%*s|", pad_left, "", COL_WIDTH_IDX - 2 - pad_left, ""); pad_left = (COL_WIDTH_C - 7)/2; printf("%*s摄氏度%*s|", pad_left, "", COL_WIDTH_C - 7 - pad_left, ""); pad_left = (COL_WIDTH_F - 8)/2; printf("%*s华氏度%*s|\n", pad_left, "", COL_WIDTH_F - 8 - pad_left, ""); printf("----------------------------------------------------\n"); // 表格内容输出 int idx = 1; for (double c = 15; c <= 30; c++, idx++) { // 序号居中 int len = to_string(idx).length(); pad_left = (COL_WIDTH_IDX - len)/2; printf("|%*s%d%*s|", pad_left, "", idx, COL_WIDTH_IDX - len - pad_left, ""); // 摄氏度数值居中(保留0位小数) len = get_num_str_len(c, 0); pad_left = (COL_WIDTH_C - len)/2; printf("%*s%.0f%*s|", pad_left, "", c, COL_WIDTH_C - len - pad_left, ""); // 华氏度数值居中(保留1位小数) double f = 1.8 * c + 32; len = get_num_str_len(f, 1); pad_left = (COL_WIDTH_F - len)/2; printf("%*s%.1f%*s|\n", pad_left, "", f, COL_WIDTH_F - len - pad_left, ""); } printf("----------------------------------------------------\n"); printf("\n\t列表形式输出\n"); // 列表输出模块 idx = 1; const int NUM_WIDTH_C = 4; const int NUM_WIDTH_F = 6; for (double c = 15; c <= 30; c++, idx++) { double f = 1.8 * c + 32; int len_c = get_num_str_len(c, 0); int pad_c = (NUM_WIDTH_C - len_c)/2; int len_f = get_num_str_len(f, 1); int pad_f = (NUM_WIDTH_F - len_f)/2; cout << idx << ". 摄氏度: " << setw(pad_c) << "" << c << setw(NUM_WIDTH_C - len_c - pad_c) << "" << " --> 华氏度: " << setw(pad_f) << "" << fixed << setprecision(1) << f << setw(NUM_WIDTH_F - len_f - pad_f) << "" << endl; } return 0; }
修改点说明
- 修复了原代码重复定义
main函数的语法错误,补充了缺失的依赖头文件 - 新增编号逻辑:所有输出行(表格行、列表行)均通过累加计数变量
idx生成顺序编号 - 实现数字居中:通过计算固定列宽与数字内容长度的差值,将差值均分后在数字左右填充空格,实现所有数值的居中显示
- 调整了表格边框的长度适配新增的编号列,保证整体布局对齐
内容的提问来源于stack exchange,提问作者Dopaminos
相关产品推荐
相关产品推荐

