我是C的新手,我正在编写一个程序,该程序需要用户提供的今天日期,将其与一些存储日期进行比较,并计算自存储日期以来的天数日期。
用户提供的日期(今天的日期)存储在10个字符的数组中:mm/dd/yyyy
我已将此数组声明为char today [10];
我已提示用户输入日期:char *todaysdate = get_string;
并在today[]
today[0]
和today[1]
代表日期中的mm
。
例如,今天的日期为06/17/2018
和today[0] = 0
,以及today[1] = 6
我已经为今天的日期创建了一个结构,由present.month
,present.day
和present.year
组成。
如果我想在present.month
中存储月份(06)的值,我该怎么办?我没有运气:
//store this date in the Date struct called present
present.month = today[0]today[1];
eprintf("Month of today's date is: %d", present.month);
我不想在today[0]
和today[1]
上执行算术,
我只想背靠背列出。
到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
typedef struct {
int month;
int day;
int year;
} Date;
int main (void) {
// declare the dates used in the program
Date AS_bday;
Date DR_bday;
Date TF_bday;
Date present;
// create a day counter of some sort, to calculate number of days between today and the birthdays
//int AS_count = 0;
//int DR_count = 0;
//int TF_count = 0;
// specify the Birthdays
AS_bday.month = 03;
AS_bday.day = 21;
AS_bday.year = 2014;
DR_bday.month = 04;
DR_bday.day = 01;
DR_bday.year = 2016;
TF_bday.month = 11;
TF_bday.day = 12;
TF_bday.year = 2017;
// create an array of chars to represent today's date
char today[10];
// prompt the user to enter today's date in mm/dd/yyyy using get_string
// store that date as a string
printf("Enter today's date (mm/dd/yyyy):");
char *todaysdate = get_string();
// extract the digits from the string using isdigit and store them in today[]
// store the / marks in today[]
for (int i = 0; i < strlen(todaysdate); i++) {
if (isdigit(todaysdate[i])) {
today[i] = (todaysdate[i] - 48);
eprintf("Value of today's date is %d", today[i]);
} else {
today[i] = todaysdate[i];
eprintf("Should print a slash: %c", today[i]);
}
}
//store this date in the present Date struct
present.month = today[0]today[1];
eprintf("Month of today's date is: %d", present.month);
}
最后,我确信有一个更清晰的方式来编写这个程序,但我对编程很新。我也欢迎提出更好的方法来实施这个计划。谢谢!
答案 0 :(得分:4)
你必须做算术。 today[0]today[1]
无效C.这应该有效:
present.month = (today[0] * 10) + today[1];
答案 1 :(得分:0)
正如cfillion所说,你必须进行算术运算,因为你从用户那里得到日期为字符串,并且你想将它们存储在结构内的整数变量中。
所以你有两个选择
present.month = ( (today[0]-48) * 10 ) + (today[1] -48);
正如您在表格中看到的那样,数字的ASCII值从48到57,这就是为什么需要进行减法才能进行转换。
typedef struct {
char[2] month;
char[2] day;
char[4] year;
} Date;
这样,您可以在不进行算术的情况下分配值,如下所示
present.month[0] = today[0];
present.month[1] = today[1];