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

已完成罗马数字相加代码,需集成STDIN实现文件输入功能

嘿,这事儿超简单!我帮你把STDIN集成的部分加上,直接就能用重定向输入啦。

首先,咱们得去掉没必要的#include <conio.h>——这玩意儿是Windows专属的,Linux编译大概率会报错,而且咱们用不上它。

接下来,核心就是从标准输入(也就是你重定向的input.txt)读取两个罗马数字,不用任何提示,直接读就行。我假设你已经有了roman_to_int(罗马数字转整数)和int_to_roman(整数转罗马数字)这两个核心函数,咱们把输入读取的部分无缝加进去:

#include <stdio.h>
#include <string.h>

// 假设你已经实现的罗马数字转整数函数
int roman_to_int(const char *s) {
    int val[256] = {0};
    val['I'] = 1; val['V'] = 5; val['X'] = 10; val['L'] = 50;
    val['C'] = 100; val['D'] = 500; val['M'] = 1000;
    
    int result = 0;
    int len = strlen(s);
    for (int i = 0; i < len; i++) {
        if (i < len - 1 && val[s[i]] < val[s[i+1]]) {
            result -= val[s[i]];
        } else {
            result += val[s[i]];
        }
    }
    return result;
}

// 假设你已经实现的整数转罗马数字函数
void int_to_roman(int num, char *result) {
    int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    const char *symbols[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    
    int idx = 0;
    result[0] = '\0';
    while (num > 0) {
        while (num >= values[idx]) {
            strcat(result, symbols[idx]);
            num -= values[idx];
        }
        idx++;
    }
}

int main() {
    // 新增的STDIN读取核心部分:直接读取两个罗马数字,无任何输入提示
    char roman1[20], roman2[20];
    // 使用scanf自动跳过空白符(空格、换行、制表符都能处理)
    if (scanf("%s %s", roman1, roman2) != 2) {
        fprintf(stderr, "输入格式错误:请提供两个有效的罗马数字\n");
        return 1;
    }
    
    // 调用你的核心计算逻辑
    int num1 = roman_to_int(roman1);
    int num2 = roman_to_int(roman2);
    int sum = num1 + num2;
    
    char sum_roman[50];
    int_to_roman(sum, sum_roman);
    
    // 输出最终结果
    printf("%s\n", sum_roman);
    
    return 0;
}

关键细节说明:

  • 无提示读取:完全没有printf("请输入罗马数字:")这类交互提示,完美符合你要求的“程序无需向用户发起任何输入提示”。
  • 兼容多种输入格式:不管你的input.txt里是一行写两个罗马数字(比如XIV XX),还是分两行写,scanf都会自动跳过空白符识别到两个目标字符串,适配重定向输入场景。
  • 简单错误处理:加了个判断,如果没读到两个有效罗马数字,会把错误信息输出到stderr,方便你排查输入文件的格式问题。

使用步骤:

  1. 把你自己实现的核心函数(如果和示例里的不一样)替换进去,编译代码:gcc roman_add.c -o a.out
  2. 准备input.txt,里面写入两个罗马数字,比如:
    MDCLXVI
    MCMXCIV
    
  3. 运行程序:./a.out < input.txt,就能看到输出MMMDCX啦!

内容的提问来源于stack exchange,提问作者Aubrianna Makayla Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:44