#include <stdio.h>
int main()
{
int minutes=0;
double days=0.0;
double years=0.0;
printf("enter minutes ");
scanf("%d ",&minutes);
days= (minutes/60)/24;
years=days/365;
printf("no of minutes %d equals no of days are %f , no of years are %f \n",minutes,days,years);
return 0;
}
在输出期间,我们必须输入两次值才能使程序正常工作,而我只使用scanf
一次。
即使我将days
的值定义为double
,其值也会被截断为整数。
答案 0 :(得分:1)
scanf
格式的字符串中的空格与零个或多个空格字符匹配。但是要知道空格在哪里结束,该函数必须能够读取不是空格字符的东西,因此是第二个输入。
简单的解决方案:请勿在{{1}}格式的字符串中使用尾随空格:
scanf
答案 1 :(得分:0)
天数的值也被截断为整数
这里
days = (minutes / 60) / 24;
赋值的右侧是使用整数算法计算的,因为仅涉及整数。整数算术不会处理任何分数,而只是丢弃它们。
例如,1/2
的结果为0
,或者4/3
的结果为1
。
因此,要解决您的问题,请将数字文字指定为浮点,如下所示:
days = (minutes / 60.) / 24.;
或(更常见,但实际上相同):
days = (minutes / 60.0) / 24.0;
或只是投射:
days = ((double) minutes / (double) 60) / (double) 24;
后者可以简化为:
days = ((double) minutes / 60) / 24;
后一种方法有效,因为计算是从内到外进行的,并且所应用的算法始终遵循“ Usual Arithmetic Conversions”,在您的情况下,该方法是将整数除以double会得出double。