在c中为float变量生成整数输出

时间:2015-12-15 18:56:25

标签: c compiler-errors integer output decimal

好的,这实际上是一个非常简单的代码,但由于我只是开始学习C,请耐心等待并帮助我。我将把我的问题作为注释放在代码旁边,这样就很容易与我怀疑的代码部分相关联。

#include <stdio.h>
main()
{
 int first_no, second_no;
 float dec_no, output_no;
 first_no = 75;
 second_no = first_no/2;
 dec_no = 35.3;
 output_no = dec_no/3;
 printf("First No:%d\n", first_no);
 printf("Second No:%d\n", second_no);
 printf("Third No:%d\n",output_no); 
 /*here I wanted to print only the integer part of the output_no */
}

这个问题是我有一本书,它显示第三个值的值为0.

然后在另一个程序中它显示编译时错误。

第二个程序:

#include <stdio.h>
void main()
{
 int x = 5.3%2;
 printf("Value of x is %d", x);
}

对于这个程序,本书说将显示编译时错误。我不明白为什么会这样。据我说,输出应该是1.

如果我使用以下代码而不是之前的代码:

#include <stdio.h>
main()
{
 int first_no, second_no;
 float dec_no, output_no;
 first_no = 75;
 second_no = first_no/2;
 dec_no = 35.3;
 output_no = dec_no/3;
 printf("First No:%d\n", first_no);
 printf("Second No:%d\n", second_no);
 printf("Third No:%d\n",dec_no); 
}

我应该期待什么输出?我仍然会得到零或一些不可预测的输出吗?

2 个答案:

答案 0 :(得分:2)

使用

的问题
printf("Third No:%d\n",output_no);

是:

    在传递给output_no之前,
  1. double会转换为printf
  2. printf%d视为格式说明符时,它需要int。当传递的对象是double类型时,行为是未定义的。
  3. 如果要打印浮点数的截断整数值,可以执行以下操作之一。

    1. 创建整数类型的临时变量,并为其指定浮点数。

       int temp = output_no;
       printf("Third No:%d\n", temp);
      
    2. 将浮点数显式转换为整数类型。

      printf("Third No:%d\n", (int)output_no);
      

答案 1 :(得分:0)

  

printf(&#34;第三号:%d \ n&#34;,dec_no);

     

我应该期待什么输出?我   仍然得到零或一些不可预测的输出?   截至printf函数,

当您尝试使用用于float(或)double的格式说明符打印整数值时,反之亦然,行为是不可预测的。 但是可以使用%c来打印等价于整数值的字符。也可以使用%d来打印字符的ASCII值(整数表示)。

  

第二个程序:对于这个程序,本书说的是编译时间   将显示错误。

根据C Reference manual

  

7.3.3表达式%表达式

     

二进制%运算符从第一个表达式除以第二个表达式得到余数。两个操作数必须是int或char,和   结果是int。在当前的实现中,其余部分已经实现   与股息相同的标志。

在你的情况下,你提供一个值5.3,所以它既不是char也不是int,所以这就是它产生编译错误的原因。

如果您仍想运行该程序,可以使用fmod()功能执行此操作。

试试这段代码:

#include<stdio.h>
#include<math.h>
void main()
{
        float x=5.3;
        int c =2;
        printf("Value of xremainer is %lf",fmod(x,c));
}

将其编译为:

$gcc test.c -lm