C++日期天数差计算程序报错及CMD输入分组问题求助
解决日期差计算程序的报错与输入处理问题
咱们先拆解你遇到的两个核心问题:类型不匹配的报错,以及正确读取每两行一组的日期输入。
1. 解决"No proper constructor to redirect 'int' to 'Date'"报错
这个报错的原因很直接:你的getDifference函数应该是设计成接收两个Date结构体作为参数,但你现在传了两个int类型的变量n1和n2,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. 正确处理每两行一组的输入逻辑
你当前的代码里,每次循环只读取了一行,还重复把同一行转成n1和n2,这完全不符合"每两行对应一组日期"的需求。正确的输入处理逻辑应该是:
- 读取第一行的测试用例数
test。 - 循环
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




