在执行时要求两个输入值

时间:2019-12-28 11:33:34

标签: c scanf arithmetic-expressions

#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,其值也会被截断为整数。

2 个答案:

答案 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。