我是c的新手,我正在尝试学习如何使用scanf
函数传入数据,然后使用printf
函数向我显示打印结果。
这看起来应该是eas,y,但我预期的输出与返回的不匹配。我的IDE是vscode
#include <stdio.h>
#define pi 3.14159
int main()
{
float size;
float radius;
scanf("this is the value : %f",&radius);
size = (2/3)*pi*(radius*radius*radius);
printf("%f",size);
return 0;
}
在这里你可以看到我输入的内容和打印的
在那之后,我制作了一个更容易理解这个概念的程序,我遇到了一个类似但不同的问题。而不是每次都返回0,现在它打印相同的常量
#include <stdio.h>
int main()
{
int a;
scanf("This is the value %d", &a);
printf("Input value read : a = %d", a);
return 0;
}
在这里你可以看到我得到的第二个程序的输出
有什么问题吗?我该怎么解决?
您似乎希望scanf
打印一条消息,然后获取一个值:
scanf("this is the value : %f",&radius);
否。这只需打印消息,然后用scanf:获取值即可获得
printf("Please insert the value :n");
if (scanf ("%f",&radius) == 1)
{
/* ... */
}
请注意scanf返回值的检查,即成功获取的变量的数量。在这种情况下,我们希望它是1,因为唯一的格式说明符是%f
。
%f
之前的消息使scanf
实际上期望恰好浮点数之前的字符串(包括空格(。只插入输入数字(在您的示例中为5(会使scanf
放弃输入,因为它与给定的字符串不匹配,并且没有存储任何值,因此radius
保持未初始化状态,执行会导致未定义的行为。此外,用整数算法计算了前导2/3
,结果为0;使用2.0/3.0
强制使用浮点运算。
涉及%d
的测试问题非常相似;您只会看到由于上述原因而未由scanf写入的CCD_ 12的随机未初始化值。