为c中的浮点变量生成整数输出
好的,这实际上是一个非常简单的代码,但由于我才刚刚开始学习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
#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
功能而言
当您尝试使用用于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