我正在做Steven G.Kochan的“Programming in C”一书,第3版。目前正致力于第9章 - 使用结构体。问题的主要部分如下,代码中的公式在问题中提供:
编写一个程序,允许用户键入两个日期然后 计算两个日期之间经过的天数。尝试 将程序逻辑地组织成单独的函数。例如, 你应该有一个接受日期作为参数的函数 结构并返回N的值。然后可以调用此函数两次, 每个日期一次,并确定数量的差异 已过去的日子。
我写的代码也在下面....但它没有正常工作:我附上一张图片作为证据,请帮我弄清问题是什么output screen showing that it doesn't allow me enter the second date.
#include <stdio.h>
struct date
{
int day;
int month;
int year;
};
//function declarations
int f (struct date thisDate);
int g (struct date thisDate);
int main(void)
{
//declarations and initializations
struct date theDate, otherDate;
int N1, N2, days;
printf("Enter the first Date (dd/mm/yyyy):");
scanf("%i/%i/%i", &theDate.day, &theDate.month, &theDate.year);
// compute N1
N1 = (1461 * f(theDate) ) / 4 + (153 * g(theDate)) / 5 + 3; //this can be replaced with a function
printf("\nEnter the second Date (dd/mm/yyyy):");
scanf("%i/%i/%i", &otherDate.day, &otherDate.month, &otherDate.year);
// compute n2
N2 = (1461 * f(otherDate) ) / 4 + (153 * g(otherDate)) / 5 + 3; //this can be replaced with a function
days = N2 - N1;
printf("\nThere are %i days between these two dates",days);
return 0;
}
int f (struct date thisDate)
{
if (thisDate.month <= 2)
{
return thisDate.year - 1;
}
else
{
return thisDate.year;
}
}
int g (struct date thisDate)
{
if ( thisDate.month <= 2)
{
return thisDate.month + 13;
}
else
{
return thisDate.month + 1;
}
}
答案 0 :(得分:1)
查看图像,输入字符串为03/09/2007
;在进行计算之前,第二个输入不会等待输入任何新内容。
问题是您使用的%i
读取八进制,十六进制或十进制数字。八进制数由前导零表示;因此,09
转换为该月的0
(因为9
不是有效的八进制数字; 08
也会产生问题),然后转换失败(没有{{在那之后0.}}。下一个输入以/
和9
开头,然后找不到2007
,因此它会停止。
多重道德:
/
的返回值。在此代码中,确保它返回3;如果不是,就会出现问题。scanf()
来阅读日期值;使用%i
。人们不使用八进制,有时会输入%d
(和09
)。