所以我必须写一个程序,给我用户输入的日期。它可以编译并运行,但是它给我的唯一输出是30天。我正在使用driver.c文件,days.c文件和days.h文件。
我尝试更改变量并重新排列if else语句的顺序,但是什么都没有改变
这是我的driver.c文件中的代码
#include <stdio.h>
#include "days.h"
int main()
{
int month;
int year;
//user enters month
printf("Enter a month (1-12): ");
scanf("%d", &month);
while(month != 0)
{
if(days_in_month(month, year) == 31)
{
printf("This month has 31 days\n");
}
else
{
printf("This month has 30 days\n");
}
if(days_in_month(month, year) == 28)
{
printf("This month has 28 days");
}
printf("Enter a month (1-12): ");
scanf("%d", &month);
}
return 0;
}
这是days.c文件中的代码
int days_in_month(int month, int year)
{
//variables
int month_given;
int num_days;
if (month_given== 1 || month_given== 3 || month_given== 5 || month_given== 7 || month_given== 8 || month_given== 10 || month_given== 12)
{
num_days== 31;
}
else if(month_given== 4 || month_given== 6 || month_given== 9 || month_given== 11)
{
num_days== 30;
}
else(month_given== 2);
{
num_days== 28;
}
}
它应该给出30天,31天或28天,具体取决于用户输入的月份
答案 0 :(得分:0)
输出之所以能给您30天,是因为...
函数“ days_in_month”应该返回一个整数,但是您没有显式返回一个整数。因此,该函数默认为隐式返回一个整数,但这不是预期的结果,这会导致if(days_in_month(month, year) == 31)
条件每次失败,代码将在else
块中打印文本。
除此之外,代码中还有其他错误之处:
num_days
(例如num_days== 31
)。这应该是
num_days = 31
。else(month_given== 2);
是不正确的。“ else”是默认情况,应跟在后面
一份声明。它不检查条件。while
语句还应该检查输入是否大于12。
像这样while(month != 0 && month < 13)
实施更正将产生一个有效的代码(在下面列出)....但是仍有改进的余地。
1。声明了变量“ year”,但未在任何地方使用它。您应该
收集此变量的输入并实现要显示的条件
2月的正确日期取决于年份是否为
年与否。最好在“ main”中。
2。您只需调用一次“ days_in_month”,然后检查返回的值 有条件的。
int main()
{
int month;
int year;
//user enters month
printf("Enter a month (1-12): ");
scanf("%d", &month);
while(month != 0 && month < 13) //input between 1 and 12
{
if(days_in_month(month, year) == 31)
{
printf("This month has 31 days\n");
}
else if(days_in_month(month, year) == 28)
{
printf("This month has 28 days\n");
}
else //tagging else at the end
{
printf("This month has 30 days\n");
}
printf("Enter a month (1-12): ");
scanf("%d", &month);
}
return 0;
}
days.c
int days_in_month(int month, int year)
{
//variables
int month_given;
int num_days;
month_given = month; //assigning month to month_given
if (month_given== 1 || month_given== 3 || month_given== 5 || month_given== 7 || month_given== 8 || month_given== 10 || month_given== 12)
{
num_days= 31;
}
else if(month_given== 4 || month_given== 6 || month_given== 9 || month_given== 11)
{
num_days= 30;
}
else //removed the conditional check (month_given== 2);
{
num_days= 28;
}
return num_days; //returning num_days
}