在C程序中,我试图查询用户的日期,该日期应放入结构中的char数组中( pIndex-> startDate )。如果日期是今天的日期,则用户只需要按Enter键 - 如果日期是其他日期,则用户必须输入。
输入由fgets完成。我认为我将检查用户输入是否相等'\ n' - 在这种情况下,我将数组设置为等于今天的日期。如果没有,则数组将是用户键入的任何内容。
要查找日期(一般情况下),我使用:
time_t now = time(NULL);
struct tm *t = localtime(&now);
..我有一个if-statement的临时字符数组:
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
这是一种错误的做法吗?谁知道更好(工作)的方式?
答案 0 :(得分:0)
试试这个
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");
答案 1 :(得分:0)
调用fgets()
时出现问题。目的地是错误的类型。读取“2014-01-01”所需的缓冲区大小肯定会包含换行符'\n'
和空字符'\0'
或至少12 char
。检查fgets()
的结果也是个好主意。
// 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();
要检查输入是否以'\n'
开头,请使用
if (pIndex->startDate[0] == '\n') {