计算两个日期之间天数的C程序

时间:2015-11-01 14:58:06

标签: c algorithm

我编写了一个计算两个日期之间天数的C程序。不幸的是,它没有正确编译。我不知道为什么。有人可以帮我修复代码吗?看起来SCANF和PRINTF函数存在一些问题。我甚至没有机会输入我自己的约会对象。

这是我得到的输出: 非法约会 -1607965827

请帮帮我。提前谢谢!

{{1}}

3 个答案:

答案 0 :(得分:1)

您需要使用传递给scanf的参数地址(使用&)

答案 1 :(得分:0)

有两个问题: - 1.在main()中,first.day是变量的名称,而不是我们必须在scanf中传递变量的引用(地址)("%d",& first.day) ;

2.如果(第二个日期大于第一个日期),你的日子可能是负数,你确定可以解决这个问题。

答案 2 :(得分:0)

scanf()的使用不正确。 %d预计会匹配int *,而不是int。另外,请务必检查输入功能的返回值。你会节省时间。除非返回代码符合预期,否则不要相信像first.day这样的输入有希望获得有效值。 @MikeCAT

良好的编译警告错误匹配的格式。启用所有编译器警告或获取新编译器。

// scanf("%d %d %d", first.day, first.month, first.year);
if (scanf("%d %d %d", &first.day, &first.month, &first.year) != 3) {
  puts("Bad input");
  return -1;
}

其他问题包括:

days_in_month[d.month])不考虑闰年。 @BLUEPIXY
int main()不可移植/正确 - 使用int main(void)`。

小东西:
leap_year(),1582年前的问题。可以在correct()中添加年份测试。 if (year > 1582) good();
int范围可能不足以显示日期编号,请使用long for(i=1; i < d.year; i++)效率低下 避免使用i == 2之类的幻数 通过地址而不是值传递结构更常见 "%d%d%d"也可以代替"%d %d %d"

BYW:很好地使用结构。