You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

C++日期天数差计算程序报错及CMD输入分组问题求助

解决日期差计算程序的报错与输入处理问题

咱们先拆解你遇到的两个核心问题:类型不匹配的报错,以及正确读取每两行一组的日期输入

1. 解决"No proper constructor to redirect 'int' to 'Date'"报错

这个报错的原因很直接:你的getDifference函数应该是设计成接收两个Date结构体作为参数,但你现在传了两个int类型的变量n1n2,C++找不到从int自动转成Date的构造函数,所以触发了报错。

你需要做这两步调整:

  • 把输入的每一行日期字符串,解析成Date结构体对象,而不是转成int。
  • 确保getDifference的参数类型是Date(或者用const Date&更高效)。

比如假设你的日期输入是空格分隔的格式(如2024 5 20 14 30 0),可以写一个辅助函数来完成字符串到Date的解析:

#include <sstream> // 别忘了加这个头文件

Date parseDate(const string& line) {
    Date date;
    istringstream iss(line);
    iss >> date.y >> date.m >> date.d >> date.h >> date.min >> date.sec;
    return date;
}

2. 正确处理每两行一组的输入逻辑

你当前的代码里,每次循环只读取了一行,还重复把同一行转成n1n2,这完全不符合"每两行对应一组日期"的需求。正确的输入处理逻辑应该是:

  1. 读取第一行的测试用例数test
  2. 循环test次,每次读取两行输入,分别解析成两个Date对象,再传入getDifference计算差值。

修改后的完整main函数示例

#include <sstream> // 新增头文件

// 辅助解析函数
Date parseDate(const string& line) {
    Date date;
    istringstream iss(line);
    iss >> date.y >> date.m >> date.d >> date.h >> date.min >> date.sec;
    return date;
}

int main(int argc, char** argv) {
    string line;
    getline(cin, line);
    int test = stoi(line);
    
    unsigned int * tab = new unsigned int[test];
    for (int i = 0; i < test; i++) {
        tab[i] = 0;
    }
    
    for (int i = 0; i < test; i++) {
        // 读取第一个日期行并解析
        getline(cin, line);
        Date date1 = parseDate(line);
        
        // 读取第二个日期行并解析
        getline(cin, line);
        Date date2 = parseDate(line);
        
        // 传入正确的Date类型参数计算差值
        tab[i] = getDifference(date1, date2);
    }
    
    for (int i = 0; i < test; i++) {
        cout << tab[i] << endl;
    }
    
    // 记得释放动态分配的内存
    delete[] tab;
    return 0;
}

另外要确认你的getDifference函数签名是正确的,比如:

unsigned int getDifference(Date date1, Date date2) {
    // 这里写你的日期差计算逻辑,比如转成总秒数相减、或计算天数差的逻辑
}

如果你的日期输入格式不是空格分隔(比如YYYY-MM-DD HH:MM:SS),只需要调整parseDate函数的解析逻辑,比如通过字符串分割处理分隔符即可。

内容的提问来源于stack exchange,提问作者Ula

火山引擎 最新活动