gpt4 book ai didi

c - 我的代码是否有问题导致输出错误?

转载 作者:行者123 更新时间:2023-11-30 20:29:19 25 4
gpt4 key购买 nike

所以我必须编写一个程序来提供用户输入的月份中的天数。它编译并运行,但它给我的唯一输出是 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 天

最佳答案

输出给你 30 天的原因是因为......

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

除此之外,代码中还存在其他不准确之处:

  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. 最后,“else”的位置存在逻辑缺陷 “main”函数中的子句。请注意,“else”处理 “以上都不是”条件。通​​过将“else”放在两个之间 “if”,如果第一个“if”失败,即使在测试第二个“if”之前,也保证执行“else”。

实现更正将得到一个工作代码(如下所列)......但还有改进的余地。

1.变量“year”已声明但未在任何地方使用。您应该 收集该变量的输入并实现要显示的条件 二月的正确日期取决于年份是否为
是否闰年。最好在“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;
}

天.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
}

关于c - 我的代码是否有问题导致输出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com