如何连续列出/打印数组中的多个值?

时间:2018-06-17 23:31:09

标签: c arrays date

我是C的新手,我正在编写一个程序,该程序需要用户提供的今天日期,将其与一些存储日期进行比较,并计算自存储日期以来的天数日期。

用户提供的日期(今天的日期)存储在10个字符的数组中:mm/dd/yyyy

我已将此数组声明为char today [10];

我已提示用户输入日期:char *todaysdate = get_string; 并在today[]

中存储该字符串的每个值

today[0]today[1]代表日期中的mm

例如,今天的日期为06/17/2018today[0] = 0,以及today[1] = 6

我已经为今天的日期创建了一个结构,由present.monthpresent.daypresent.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);
}

最后,我确信有一个更清晰的方式来编写这个程序,但我对编程很新。我也欢迎提出更好的方法来实施这个计划。谢谢!

2 个答案:

答案 0 :(得分:4)

你必须做算术。 today[0]today[1]无效C.这应该有效:

present.month = (today[0] * 10) + today[1];

答案 1 :(得分:0)

正如cfillion所说,你必须进行算术运算,因为你从用户那里得到日期为字符串,并且你想将它们存储在结构内的整数变量中。

所以你有两个选择

1。做算术

   present.month = ( (today[0]-48) * 10 ) + (today[1] -48);

有必要将48减去该值,因为字符存储为ASCII值。enter image description here

正如您在表格中看到的那样,数字的ASCII值从48到57,这就是为什么需要进行减法才能进行转换。

2。将您的结构重新设置为保持字符串

typedef struct {
  char[2] month;
  char[2] day;
  char[4] year;
} Date;

这样,您可以在不进行算术的情况下分配值,如下所示

present.month[0] = today[0];
present.month[1] = today[1];