2012-05-12 98 views
0

我有一个编程任务,我们被要求创建一个程序,用户可以在这个格式中输入dd/mm /年的日期。然后,我们必须找到一种方法来提取每个数字,并将日,月和年的字段放入结构中。在C中添加一个字符串的字符

我想读取用户的整个输入作为一个字符串,然后只选择我想要的字符串的值。这是我的代码。

结构声明:

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); 

但是,这是行不通的,我用尽了想法。你能否给我一些关于如何解决这个问题的指导。

谢谢。

+1

project [xxx] .date.day是一个字符,而不是字符串。只是**一个字符** – wildplasser

+0

define imerominia – akonsu

+1

在C中'+'从来没有串联使用'strncpy','strncat'或分别分配每个字节。 – Amadan

回答

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.前输入。Ex输入:07/03/2012。请注意7和3之前的前面的0。首先,您可以尝试像这样并稍后自行即兴处理所有错误情况。

2

如果你想将其保存为数字,使用int

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

至于转换,字符为int ...

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

理解它是如何工作的,做同样的一个月和一年。

1

你可以拿12/05/2012 [今天]作为输入刺痛。现在写
I = 0; //考虑的日期是在海峡
的printf( “%d”,STR [1]); //获得等同的ASCII字符

现在你知道的ACII字符char 2.从int的ascii char中减去它2.存储在一个变量中并在整个数组中减去它。

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,这需要使用多一点的努力,但基于寂寂日历将验证输入。