好的,这实际上是一个非常简单的代码,但由于我只是开始学习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);
}
我应该期待什么输出?我仍然会得到零或一些不可预测的输出吗?
答案 0 :(得分:2)
使用
的问题printf("Third No:%d\n",output_no);
是:
output_no
之前,double
会转换为printf
。printf
将%d
视为格式说明符时,它需要int
。当传递的对象是double
类型时,行为是未定义的。如果要打印浮点数的截断整数值,可以执行以下操作之一。
创建整数类型的临时变量,并为其指定浮点数。
int temp = output_no;
printf("Third No:%d\n", temp);
将浮点数显式转换为整数类型。
printf("Third No:%d\n", (int)output_no);
答案 1 :(得分:0)
printf(&#34;第三号:%d \ n&#34;,dec_no);
我应该期待什么输出?我 仍然得到零或一些不可预测的输出? 截至
printf
函数,
当您尝试使用用于float(或)double的格式说明符打印整数值时,反之亦然,行为是不可预测的。 但是可以使用%c来打印等价于整数值的字符。也可以使用%d来打印字符的ASCII值(整数表示)。
第二个程序:对于这个程序,本书说的是编译时间 将显示错误。
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