0

我有一个编程任务,我们被要求创建一个程序,用户可以在其中输入这种格式 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 );

但是,这不起作用,我的想法已经不多了。你能给我一些关于如何解决这个问题的指导吗?

谢谢。

4

4 回答 4

2

如果要将它们保存为数字,请使用int

struct datestructure{
    int day;
    int month;
    int year;
  };

至于转换,char to int ...

project[n].date.day = (dateinput[0] - '0') * 10 + dateinput[1] - '0';

了解这是如何工作的,并在同一月份和同一年进行。

于 2012-05-12T14:19:05.093 回答
1

以下是一些建议:

  1. 考虑将日、月和年的类型更改为 int。
  2. 从完整的日期字符串中解析日、月和年
  3. 使用系统函数之一(atoi 或 strtol 等)或您自己的逻辑代码将每一天、一月和一年转换为整数。

解析字符串的一些基本示例(只是一个示例供您理解。还有其他更好的方法):

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。例如输入:07/03/2012。注意前面的 0 在 7 和 3 之前。首先你可以这样尝试,然后你自己即兴发挥来处理所有的错误场景。

于 2012-05-12T14:21:15.147 回答
1

您可以将 12/05/2012[今天] 作为输入字符串。现在写
i = 0;//考虑日期在 str
printf("%d", str[i]);//得到等价的 ascii char

现在您知道 char 2 的 acii char。从 int 2 的 ascii char 中减去它。存储在一个变量中并在整个数组中减去它。

于 2012-05-12T14:31:57.013 回答
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,这需要更多的努力来使用,但会根据对日历的了解来验证输入。

于 2012-05-12T18:53:09.343 回答