C 从用户处查询日期,如果用户按enter键,则使用今天的日期

C 从用户处查询日期,如果用户按enter键,则使用今天的日期,c,if-statement,time,fgets,C,If Statement,Time,Fgets,在一个C程序中,我试图向用户查询一个日期,该日期应放入pIndex->startDate结构中的字符数组中。如果日期是今天的日期,则用户只需按enter键即可。如果日期是其他日期,则用户必须键入该日期 输入由fgets完成。我的想法是,我将检查用户输入是否等于“\n”-在这种情况下,我将数组设置为等于今天的日期。否则,数组将是用户键入的任何内容 要查找一般日期,我使用: time_t now = time(NULL); struct tm *t = localtime(&now); .

在一个C程序中,我试图向用户查询一个日期,该日期应放入pIndex->startDate结构中的字符数组中。如果日期是今天的日期,则用户只需按enter键即可。如果日期是其他日期,则用户必须键入该日期

输入由fgets完成。我的想法是,我将检查用户输入是否等于“\n”-在这种情况下,我将数组设置为等于今天的日期。否则,数组将是用户键入的任何内容

要查找一般日期,我使用:

time_t now = time(NULL);
struct tm *t = localtime(&now);
..我有一个用于if语句的临时字符数组:

char temp_date[11]="2014-01-01";  //initialized with something, guess there is a better solution
我尝试了以下方法:

    printf("Enter start date (press Enter for todays date) > ");
    fgets(pIndex->startDate, MAXDATE, stdin);
        if (pIndex->startDate=='\n'){
        sprintf (temp_date, "%d-%02d-%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday);
            (pIndex->startDate)==temp_date;
        }
/*Check the result*/
    printf("CHECK TEMP_DATE: %s\n> ",temp_date);
    system("pause");
但是,输出中显示的唯一内容是值char temp_date被初始化为:2014-01-01

这是错误的做法吗?有人知道更好的工作方式吗?

试试这个

size_t length;

printf("Enter start date (press Enter for todays date) > ");
fgets(pIndex->startDate, MAXDATE, stdin);
/* this is wrong */
// if (pIndex->startDate=='\n'){
length = strlen(pIndex->startDate);
if ((length == 1) && (pIndex->startDate[length - 1] == '\n')) {
    sprintf(temp_date, "%d-%02d-%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday);
    strcpy(pIndex->startDate, temp_date);
}
/*Check the result*/
printf("CHECK TEMP_DATE: %s\n> ",temp_date);
system("pause");
调用fgets时出现问题。目标类型错误。读取2014-01-01所需的缓冲区大小肯定包括换行符“\n”和空字符“\0”或至少12个字符。检查fgets的结果也是个好主意

要检查输入是否以“\n”开头,请使用


这个pIndex->startDate==temp\u date;是什么;?也许您想要if pIndex->startDate[0]='\n'而不是if pIndex->startDate='\n'?此外,您正在进行比较,而不是iharob在其评论中指出的行中的赋值。@CoolGuy pIndex->startDate[0]确实是解决方案。谢谢。@iharob,临时日期似乎没有必要,这是试图临时放置该值。但是我当然可以不用。谢谢。MAXDATE的值是多少?startDate字段的定义是什么?如果pIndex->startDate[0]='\n'{就足够了。
// Problem code
// MAXDATE is 11, startDate is a char
#define MAXDATE 11
struct {
  char startDate;
} *pIndex;
...
fgets(pIndex->startDate, MAXDATE, stdin);

// Recommend
#define MAXDATE 11
struct {
  char startDate[MAXDATE + 1];
} *pIndex;
...
if (fgets(pIndex->startDate, MAXDATE, stdin) == NULL) Handle_EOF();
if (pIndex->startDate[0] == '\n') {