我正在为编程I课做作业。我是C++的新手。我们要做的是获取用户在执行时提供的年、月和日参数,并计算它们与当前日期之间的差值。
在我的主函数中,我有以下代码从用户那里获取这些参数:
int main(int argc, char** argv)
我的理解是,这将创建一个字符数组并在其中存储用户的参数。接下来,我将存储在此数组中的参数分配给新的char变量,以便将它们传递给函数,如下所示:
int main(int argc, char** argv)
{
int year, month, day;
char arg1 = argv[1];
string arg2 = argv[2];
char arg3 = argv[3];
argumentChange(argc, arg1, arg2, arg3, year, month, day);
blablabla other code
}
哪里
argumentChange
是我将它们发送到的函数。问题是,当我尝试编译此文件时,我收到以下错误:
错误:从“char*”到“char”[-fpermissive]的转换无效
字符arg1=argv[1];
错误:从“char*”到“char”[-fpermissive]的转换无效
charArg3=argv[3];
我已经试着寻找这个问题,但我真的无法理解其他地方给出的解释。我看到很多人提到了“指针”,这是我们在课堂上还没有讨论过的,我对此一无所知。我做错了什么?我该怎么做?
以下是我整个程序的完整代码:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
void argumentChange(int numArg, char chArg1, string sArg2, char chArg3, int year, int month, int day)
{
cout << "Starting birth date: " << chArg1 << " " << sArg2 << " " << chArg3
<< endl;
if (numArg < 4 || numArg > 4)
{
cout << "Correct Usage: ./cl <birth_year><birth_month><birth_day>" << endl;
cout << "Try again, dude." << endl;
}
else if (numArg == 4)
{
year = chArg1 - '0';
day = chArg3 - '0';
if ((sArg2 == "january") || (sArg2 == "January"))
{
month = 0;
}
else if ((sArg2 == "february") || (sArg2 == "February"))
{
month = 1;
}
else if ((sArg2 == "march") || (sArg2 == "March"))
{
month = 2;
}
else if ((sArg2 == "april") || (sArg2 == "April"))
{
month = 3;
}
else if ((sArg2 == "may") || (sArg2 == "May"))
{
month = 4;
}
else if ((sArg2 == "june") || (sArg2 == "June"))
{
month = 5;
}
else if ((sArg2 == "july") || (sArg2 == "July"))
{
month = 6;
}
else if ((sArg2 == "august") || (sArg2 == "August"))
{
month = 7;
}
else if ((sArg2 == "september") || (sArg2 == "September"))
{
month = 8;
}
else if ((sArg2 == "october") || (sArg2 == "October"))
{
month = 9;
}
else if ((sArg2 == "november") || (sArg2 == "November"))
{
month = 10;
}
else if ((sArg2 == "december") || (sArg2 == "December"))
{
month = 11;
}
else
{
cout << "Error: You have entered an invalid term for month. Please type ";
cout << "the complete name of a valid month." << endl;
}
}
}
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 argc, char** argv)
{
int year, month, day;
char arg1 = argv[1];
string arg2 = argv[2];
char arg3 = argv[3];
argumentChange(argc, arg1, arg2, arg3, year, month, day);
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;
}