【发布时间】:2014-03-11 10:59:37
【问题描述】:
我正在尝试制作一个用于制作公历的大型程序,但目前,我只是在尝试使用解析输入日期的函数。一些函数(sscanf 和 fgets)我不太确定如何将它们与程序的其余部分一起使用。这是我的尝试:
int main(int arg, char *argv[]) {
/*
* Request a date from the user
* in format DD-MM-YYYY, DD.MM.YYYY or DD/MM/YYYY
*/
date d;
char input_date[20];
fgets(input_date, 20, stdin);
printf("Enter your date of birth in the form DD/MM/YYYY:");
//fgets(d, 100, stdin);
sscanf(input_date,"%d", &d.day, &d.month, &d.year);
if (leapYearFeb(d.year, d.month)) {
d.day = d.day + 1;
}
if (parse_formatted_date(input_date, &d))
printf("date: %s\ndd = %d, mm = %d, yy = %d\n", input_date, d.day, d.month, d.year);
return 1;
return 0;
}
这是我调用 parse_formatted_date 的 date.h 头文件:
#ifndef DATE_H_
#define DATE_H_
// Define the structure date.
typedef struct {
int day;
int month;
int year;
} date;
// Parses a string 'formatted_date' representing a date
// in format DD-MM-YYYY, DD.MM.YYYY or DD/MM/YYYY
// into a structure date 'parsed_date'.
void parse_formatted_date(char * formatted_date, date * parsed_date) {
const int ret = sscanf(formatted_date, "%d-%d-%d",
&parsed_date->day,
&parsed_date->month,
&parsed_date->year);
//printf("Day: %d, Month: %d, Year: %d\n", d.day, d.month, d.year);
//return ret == 3;
}
#endif
目前,我遇到的错误是:
main_Assignment4.c: In function ‘main’:
main_Assignment4.c:22: error: void value not ignored as it ought to be
不确定这些错误是什么意思或如何解决? 谢谢!
【问题讨论】:
-
再次
sscanf(input_date,"%d", &d.day, &d.month, &d.year);错误。看看你错过了什么? -
不抱歉...我该如何解决?
-
if (parse_formatted_date(input_date, &d))是错误的,因为您将void parse_formatted_date声明为void返回类型,因此它会将 error.make 返回类型设置为int -
哦,好的。那么通过将返回类型设为 int,sscanf 现在可以从该函数中读取数据了吗?
-
no no..
sscanf没有从中读取。但是为什么你把if条件简单地放在parse_formatted_date(input_date, &d)没有if。
标签: c fgets scanf gregorian-calendar