如果此代码中有一个愚蠢的错误,我提前道歉,但我似乎无法解决它。我的问题是这个,我用GCC-8编译(通过home-brew安装在Mac上),然后在终端执行。当使用int时,定义变量s& a,我使用下面的print语句输出零作为输出。如果我宣布s&变量为double我仍然为前两个print语句得到零,而对于最后一个print语句则为1024。我只是迷失了发生的事情。感谢任何帮助!
/* square code */
#include <stdio.h>
int main() {
int s, a;
printf("enter the length of your square \n");
scanf("%f", &s);
a= s * s;
printf("the area of your square is %f cm using f placeholder \n", a);
printf("the area of your square is %lf cm uning fl placeholder\n", a);
printf("the area of your square is %d cm using d placeholder \n", a);
return(0);
}
答案 0 :(得分:0)
int s;
scanf("%f", &s);
如果s
是int
,那么您需要使用int
代替"%d"
进行"%f"
扫描。您正在做的是scanf()
和printf()
中未定义的行为。需要扫描整数并将其打印为整数。
答案 1 :(得分:0)
在您的代码中,您使用s
作为int
,当您使用scanf
时,您使用%f
代替%d
。这就是你将前两个输出作为零的原因。
对于第三个输出,您将获得预期值,因为在这种情况下您正确使用%d
。请参阅以下代码:
int s;
printf("enter the value");
scanf("%d", &s);
printf("the area of square is=", s*s);
答案 2 :(得分:0)
我认为误解是您将转换说明符%d
和%f
视为仅定义输出格式,而不管传递的值的类型如何。
实际上,每个转换说明符都与它接受的特定类型的参数紧密耦合;例如,%d
仅为整数类型定义,而所有其他类型(如浮点或字符串与%d
一起使用)将产生未定义的行为(例如,参见cpp-reference of printf以获取更多详细解释)。
因此double f=1.2;printf("%d",f)
不将浮点值1.2
格式化为整数(有人可能希望1
作为输出);它反而产生未定义的行为,有任何输出(甚至没有输出),崩溃,......等等。
同样适用于scanf
- 格式说明符。
因此,如果数据类型为int
,请使用%d
;如果数据类型为double
,请使用%f
。
答案 3 :(得分:0)
还要感谢使用&#34; int s,a&#34;时使用%d的帮助。