c - C - 将结构变量从一个函数传递到另一个函数
问题描述
新的编码员在 C 中上课。我正在尝试编写一个程序来计算给定日期的数字,然后使用该数字来确定日期所在的星期几。程序未完成,因为我无法将存储在结构(struct date udate)中的用户输入从函数 get_date 传递到函数 calc_date_number。任何帮助,将不胜感激。
#include <stdio.h>
/*Define structure
------------------*/
struct date
{
int month;
int day;
int year;
};
/*Declare function prototypes
-----------------------------*/
struct date get_date (struct date);
void calc_date_number (struct date);
void main (void)
{
struct date udate, calc_date;
printf("Welcome to the Date to Day-of-the-Week program.\n\nThe program will give the day of the
for any date from 1/1/1900.\n\n");
get_date (udate);
calc_date_number (calc_date);
}
/*Define functions get_date
----------------------------*/
struct date get_date (struct date udate)
{
do
{
printf ("Enter the date (mm/dd/yyyy): ");
scanf ("%d/%d/%d", &udate.month, &udate.day, &udate.year);
if (udate.month < 1 || udate.month > 12)
printf ("Invalid month. Please re-enter date.\n\n");
else if (udate.day <1 || udate.day > 31)
printf ("Invalid day. Please re-enter date.\n\n");
else if (udate.year < 1900)
printf ("Invalid year. Please re-enter date.\n\n");
else if (udate.month ==2 && udate.day == 29 && (udate.year !=0 && (udate.year == 0 ||
udate.year % 400 != 0)))
printf ("Invalid date. Not a leap year. Please re-enter date.\n\n");
}while (udate.month < 1 || udate.month > 12 || udate.day < 1 || udate.day > 31 || udate.year <
1900);
return udate;
} /*End get_date*/
/*Define function calc_date_number
----------------------------------*/
void calc_date_number (struct date calc_date)
{
printf("calc_date is %i %i %i\n\n", calc_date.month, calc_date.day, calc_date.year);
long int n;
if (calc_date.month <= 2)
{
calc_date.year = calc_date.year - 1;
calc_date.month = calc_date.month + 13;
}
else
{
calc_date.month = calc_date.month + 1;
}
n = 1461 * calc_date.year / 4 + 153 * calc_date.month / 5 + calc_date.day;
}/*End function calc_date_number*/
解决方案
这是您的程序的工作版本,带有额外的注释来解释。
#include <stdio.h>
/*Define structure
* ------------------*/
struct date
{
int month;
int day;
int year;
};
/*Declare function prototypes
* -----------------------------*/
struct date get_date (struct date);
long int calc_date_number (struct date); /* now return the number */
/* use int instead of void */
int main (void)
{
struct date udate, calc_date;
printf("Welcome to the Date to Day-of-the-Week program.\n\nThe program will give the day of the"
"for any date from 1/1/1900.\n\n");
calc_date = get_date (udate); /* store the result in calc_date */
long int n = calc_date_number (calc_date); /* store the result in n */
printf("calculated date number : %ld\n", n); /* display the value just calculated */
return 0; /* return code of the program */:
}
/*Define functions get_date
* ----------------------------*/
struct date get_date (struct date udate)
{
do
{
printf ("Enter the date (mm/dd/yyyy): ");
scanf ("%d/%d/%d", &udate.month, &udate.day, &udate.year);
if (udate.month < 1 || udate.month > 12)
printf ("Invalid month. Please re-enter date.\n\n");
else if (udate.day <1 || udate.day > 31)
printf ("Invalid day. Please re-enter date.\n\n");
else if (udate.year < 1900)
printf ("Invalid year. Please re-enter date.\n\n");
else if (udate.month ==2 && udate.day == 29 && (udate.year !=0 && (udate.year == 0 ||
udate.year % 400 != 0)))
printf ("Invalid date. Not a leap year. Please re-enter date.\n\n");
}while (udate.month < 1 || udate.month > 12 || udate.day < 1 || udate.day > 31 || udate.year <
1900);
return udate;
} /*End get_date*/
/*Define function calc_date_number
* ----------------------------------*/
long int calc_date_number (struct date calc_date)
{
printf("calc_date is %i %i %i\n\n", calc_date.month, calc_date.day, calc_date.year);
long int n;
if (calc_date.month <= 2)
{
calc_date.year = calc_date.year - 1;
calc_date.month = calc_date.month + 13;
}
else
{
calc_date.month = calc_date.month + 1;
}
n = 1461 * calc_date.year / 4 + 153 * calc_date.month / 5 + calc_date.day;
return n;
}/*End function calc_date_number*/
推荐阅读
- google-cloud-platform - 使用 Cloud Shell 定义最近的 Google 数据中心位置
- heroku - Heroku 错误日志 L10(输出缓冲区溢出)
- python - 自定义现有颜色条
- azure - 用于计划触发器的 Azure 数据工厂 CI/CD 不起作用
- php - 提示用户下载excel文件?
- python - 如何使用 keras 加载图像数据进行回归?
- snowflake-cloud-data-platform - 雪花数据库和雪花模式有什么区别
- discord - 我正在制作一个不和谐的机器人并希望它发送给用户
- r - 使用 position_dodge 将误差线映射到 geom_points
- tensorflow - 验证损失曲线平坦且训练损失曲线高于验证误差曲线