双,整数,长双

时间:2018-06-16 18:03:45

标签: c int double

如果此代码中有一个愚蠢的错误,我提前道歉,但我似乎无法解决它。我的问题是这个,我用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); 
}

4 个答案:

答案 0 :(得分:0)

int s;
scanf("%f", &s);

如果sint,那么您需要使用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;双s,a&#34;时,我意识到我的scanf()函数正在使用scanf(&#34;%f&#34;,s)而不是正确的scanf(&#34;%lf& #34;,s)&#34;。

还要感谢使用&#34; int s,a&#34;时使用%d的帮助。

相关问题