【发布时间】:2018-11-25 16:19:52
【问题描述】:
我的目标是打印和存储 num 和 res 的字符串值,并使用 SetNum 和 SetRes 函数将它们返回以在 main 中使用,并在 main 函数中后续代码的算术运算中使用它们。以下代码产生
编号为 34 分辨率为 4.80873 4.00000
其中 4.0000 应该是 res 的值。我想打印它以了解 SetRes 是否真的返回了正确的浮点值,但它没有。如何更正此代码?
注意:ObjectInt 检查 token 是否为整数,ObjectFloat 检查 token 是否为 Float,并在文件中扫描对象。
int setNum(const char* object)
{
if (objectInt(object)) {
int number, num;
number = atoi(object);
num = number;
printf("num to %d\n", num);
}
else if (objectFloat(object)) {
float numberf, numf;
numberf = atof(object);
numf = numberf;
printf("num to %lf\n", numf);
}
}
int setRes(const char* object)
{
if (objectInt(object)) {
int number, res;
number = atoi(object);
res = number;
printf("res to %d\n", res);
}
else if (objectFloat(object)) {
float resf;
resf = atof(object);
printf("res to %lf\n", resf);
return resf;
}
}
int main()
{
char object[100];
int number, result;
float numf, resf;
int flag = 0;
//print number and res if int
if (objectInt(object)) {
if (flag == 1) setNum(object);
else setRes(object);
}
//print number and res if float
else if (objectFloat(object)) {
if (flag == 1) setNum(object);
else resf = setRes(object);
printf("%lf", resf);
}
else if (strcmp(object, IsitNum) == 0) {
flag = 1;
}
else if (strcmp(object, IsitRes) == 0) {
flag = 2;
}
}
【问题讨论】:
-
无法编译该代码。请提供minimal reproducible example。
-
setRes()并不总是返回值,即使在resf = setRes(object);中使用了返回值 --> 未定义的行为。发布minimal reproducible example。 earlier question 中指出了这一点。我see many questions关于相关的事情没有很好地理解之前的帖子。 -
另外,main 中的
resf可能未初始化,具体取决于flag的值。 -
这不是全部代码。
objectIntObjectFloat、IsitNum、IsitRes是如何声明和定义的?setRes函数在objectInt返回 true 或objectInt返回 false 并且objectFloat返回 false 的情况下不返回任何内容。setNum函数没有返回语句。具有返回类型且没有返回 spawns demons 的函数,您的代码将永远无法按预期工作。将return ..语句添加到您的函数中。lprintf 修饰符对%lf没有影响,您可以只使用%f进行浮点数。