我有编程任务,我们被要求创建一个程序,用户可以用这种格式输入日期dd / mm / year。然后我们必须找到一种方法来提取每个数字并在结构中输入日,月和年字段。
我想将用户的整个输入读作字符串,然后只选择我想要的字符串的值。这是我的代码。
结构声明:
struct datestructure{
char day;
char month;
char year;
};
struct prj{
int ID;
struct namestructure name;
struct datestructure date;
float price;
};
struct prj project[MAX];
这是我写的代码。
char dateinput[11];
scanf("%s", dateinput);
printf("%s", dateinput); //making sure that the input is read correctly
project[n].date.day = dateinput[0]+dateinput[1];
printf("%s", project[n].date.day );
然而,这不起作用,我的想法已经不多了。你能否就如何解决这个问题给我一些指导。
感谢。
答案 0 :(得分:2)
如果您想将其另存为数字,请使用int
:
struct datestructure{
int day;
int month;
int year;
};
至于转换,char到int ...
project[n].date.day = (dateinput[0] - '0') * 10 + dateinput[1] - '0';
了解其工作原理,并在同一个月和一年中进行。
答案 1 :(得分:1)
以下是一些建议:
解析字符串的一些基本示例(只是一个示例供您理解。还有其他更好的方法):
char day[3] = {0};
char month[3] = {0};
char year[5] = {0};
memcpy(day, dateinput,2);
memcpy(month,dateinput+3, 2);
memcpy(year,dateinput+5, 4);
注意: 上述代码不会处理错误的输入,并认为具有单个数字的日期和月份将使用前面的0进行输入.Ex输入: 07月03日。请注意前面的0在7和3之前。首先,您可以尝试这样做以及稍后自己即兴创作以处理所有错误情况。
答案 2 :(得分:1)
您可以将12/05/2012 [今天]作为输入法。现在写上
i = 0; //考虑日期在str中
printf(“%d”,str [i]); //得到等效的ascii char
现在你知道了char 2的acii char。从int的ascii char中减去它。存储在变量中并在整个数组中减去它。
答案 3 :(得分:1)
您已经在使用scanf
,这可能比您意识到的更多:
#include <stdio.h>
struct datestructure {
int day;
int month;
int year;
};
int main() {
struct datestructure date;
int count = scanf("%d/%d/%d", &date.day, &date.month, &date.year);
if (count != 3) {
printf("Invalid input\n");
} else {
printf("You said %d-%d-%d\n", date.year, date.month, date.day);
}
}
还有strftime
,需要花费更多精力才能使用,但会根据对日历的了解来验证输入。