我是C ++的新手。在我的编程I课程中,我作为期中考试获得了以下任务:
- 计算你活了多少天 (纪念时间从1970年1月1日起以秒存储)
出生年份,出生月份,出生日期间的命令行参数
现在,我已经找出函数本身实际上相互减去两个日期,并且我已经想出如何获取当前日期并将其粘贴在该函数中。我遇到的问题是如何获取用户的输入日期并将其发送到该功能。
我一直在使用“测试”代码片段来实现这一点,不幸的是,当我尝试编译它时,我只是得到了一些我根本不理解的错误,所以我很清楚做错了。
#include <iostream>
#include <ctime>
using namespace std;
struct tm a(int year, int month, int day)
{
struct tm birth {0};
cin >> year >> endl;
cin >> month >> endl;
cin >> day >> endl;
birth.tm_year = year - 1900;
birth.tm_mon = month;
birth.tm_mday = day;
return birth;
}
int main()
{
int year, month, day;
cout << "Enter a year, month, and day: " << endl;
cin >> year >> month >> day >> endl;
tm a(year, month, day);
time_t x = mktime(&a);
time_t y = time(0);
if ( x != (time_t)(-1) && y != (time_t)(-1) )
{
double difference = difftime(y, x) / (60 * 60 * 24);
cout << ctime(&x);
cout << ctime(&y);
cout << "difference = " << difference << " days" << endl;
}
return 0;
}
我已经尝试使用谷歌搜索其中的一些错误,我看到的结果一直在谈论“指针”。我不知道指针是什么,翻阅我们的教科书,它看起来像是我们现在所处的三到四章。前几天我试着向我的教授询问这件事,他只是咯咯笑着说了一句“嗯,是的,这就是期中考试的重点”。我不明白这是否意味着我应该自己弄清楚指针,或者我不应该使用它们。
我试图从用户在执行点输入的参数中获取一年,一个月和一天,并将它们粘贴到struct tm中,以便我的底部函数能够正常工作。
编辑:我发现我正在尝试将结构用作函数,这是错误的。我做了以下更改:#include <iostream>
#include <ctime>
using namespace std;
struct tm bday(int year, int month, int day)
{
struct tm r {0};
r.tm_year = year - 1900;
r.tm_mon = month;
r.tm_mday = day;
return r;
}
int main()
{
int year, month, day;
cout << "Enter a year, month, and day: " << endl;
cin >> year >> endl;
cin >> month >> endl;
cin >> day >> endl;
struct tm a = bday(year, month, day);
time_t x = mktime(&a);
time_t y = time(0);
if ( x != (time_t)(-1) && y != (time_t)(-1) )
{
double difference = difftime(y, x) / (60 * 60 * 24);
cout << ctime(&x);
cout << ctime(&y);
cout << "difference = " << difference << " days" << endl;
}
return 0;
}
现在编译时出现以下错误:
filename.cpp:22:17:错误:不匹配'运营商&gt;&gt;'
filename.cpp:23:18:错误:不匹配'operator&gt;&gt;'
filename.cpp:24:16:错误:不匹配'运营商&gt;&gt;'
答案 0 :(得分:0)
这是不正确的:
cin >> year >> endl;
您无法在endl
中阅读任何内容。您可能会将输入与输出混淆,其中std::cout << x << std::endl;
是常见模式。但是,作为旁注,您不需要在每行之后输出endl
。 endl
不仅会添加换行符,还会刷新流。如果您只想开始新行,请仅使用\n
。