我的代码有问题吗?

时间:2019-10-17 22:31:19

标签: c

所以我必须写一个程序,给我用户输入的日期。它可以编译并运行,但是它给我的唯一输出是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天,具体取决于用户输入的月份

1 个答案:

答案 0 :(得分:0)

输出之所以能给您30天,是因为...

函数“ days_in_month”应该返回一个整数,但是您没有显式返回一个整数。因此,该函数默认为隐式返回一个整数,但这不是预期的结果,这会导致if(days_in_month(month, year) == 31)条件每次失败,代码将在else块中打印文本。

除此之外,代码中还有其他错误之处:

  1. 传递给“ days_in_month”函数的“ month”参数 在功能内的任何地方都没有使用。
  2. 在“ days_in_month”函数中,您正在检查是否相等 num_days(例如num_days== 31)。这应该是 num_days = 31
  3. 在“ days_in_month”功能中,else(month_given== 2); 是不正确的。“ else”是默认情况,应跟在后面 一份声明。它不检查条件。
  4. while语句还应该检查输入是否大于12。 像这样while(month != 0 && month < 13)
  5. 最后,“其他”的放置存在逻辑缺陷     “ main”函数中的子句。请注意,“ else”处理     “以上皆无”条件。通​​过将“ else”置于两个之间     “ if”,如果第一个“ if”失败,则即使在测试第二个“ if”之前,也保证“ else”执行。

实施更正将产生一个有效的代码(在下面列出)....但是仍有改进的余地。

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
}