为c中的浮点变量生成整数输出

为c中的浮点变量生成整数输出,c,compiler-errors,integer,output,decimal,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; pri

好的,这实际上是一个非常简单的代码,但由于我才刚刚开始学习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 */
}
#包括
main()
{
int first_no,second_no;
浮点数、输出点数;
第一个=75;
第二个编号=第一个编号/2;
十二月号=35.3;
输出号=12号/3;
printf(“第一个编号:%d\n”,第一个编号);
printf(“第二个编号:%d\n”,第二个编号);
printf(“第三个编号:%d\n”,输出编号);
/*这里我只想打印输出的整数部分*/
}
问题是我有一本书,它将第三个no的值显示为0

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

第二个方案:

#include <stdio.h>
void main()
{
 int x = 5.3%2;
 printf("Value of x is %d", x);
}
#包括
void main()
{
int x=5.3%2;
printf(“x的值为%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); 
}
#包括
main()
{
int first_no,second_no;
浮点数、输出点数;
第一个=75;
第二个编号=第一个编号/2;
十二月号=35.3;
输出号=12号/3;
printf(“第一个编号:%d\n”,第一个编号);
printf(“第二个编号:%d\n”,第二个编号);
printf(“第三个编号:%d\n”,第二个编号);
}

我应该期望什么样的输出?我是否仍然得到零或一些不可预测的输出

使用just的问题

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

  • output\u no
    在传递到
    printf
    之前被转换为
    double
  • printf
    %d
    视为格式说明符时,它需要
    int
    。当所传递的对象的类型为
    double
    时,行为是未定义的
  • 如果要打印浮点数的截断整数值,可以执行以下操作之一

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

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

    printf("Third No:%d\n", (int)output_no);
    
  • printf(“第三个编号:%d\n”,第二个编号)

    我应该期望什么样的输出?是吗 仍然得到零或一些不可预测的输出? 就
    printf
    功能而言

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

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

    7.3.3表达式%表达式

    二进制%运算符将第一个表达式除以第二个表达式得到余数。两个操作数都必须是int或char,并且 结果是int。在当前的实现中,剩余的是 与股息相同的符号

    在本例中,您提供的是一个值
    5.3
    ,因此它既不是char,也不是int,这就是它生成编译错误的原因

    若你们仍然想运行那个程序,你们可以使用这个函数

    请尝试以下代码:

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

    为什么输出\u no被转换为double?对于任何具有可变参数数的函数,
    float
    s被转换为
    double
    。它有历史原因,但现在在标准中指定了。好的,但在这种情况下,输出如何变为零?您的程序受到未定义行为的影响。在这种情况下解释某种行为是毫无意义的。好吧,你的意思是说输出可以是任何不一定为零的东西,因为输出是不可预测的?欢迎:-)我也会尝试详细解释上述问题的答案。我真的很感激。:)厕所。我不介意,你可以投票或接受答案,以表示感谢。“根据我的说法,输出应该是1”-编译器按照C标准运行,而不是你。如果你真的使用现代编译器编译这些程序,你会看到编译器输出的许多错误/警告。注意:编译时,始终启用所有警告。(对于gcc,至少使用:
    -Wall-Wextra-pedantic
    )在尝试实际运行程序之前修复警告。
    $gcc test.c -lm