You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:54:05