我编写了一个计算两个日期之间天数的C程序。不幸的是,它没有正确编译。我不知道为什么。有人可以帮我修复代码吗?看起来SCANF和PRINTF函数存在一些问题。我甚至没有机会输入我自己的约会对象。
这是我得到的输出: 非法约会 -1607965827
请帮帮我。提前谢谢!
{{1}}
答案 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:很好地使用结构。