【问题标题】:C code. Why does my code not return the proper value in main but prints the right value using function?C 代码。为什么我的代码没有在 main 中返回正确的值,而是使用函数打印正确的值?
【发布时间】: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 exampleearlier question 中指出了这一点。我see many questions关于相关的事情没有很好地理解之前的帖子。
  • 另外,main 中的 resf 可能未初始化,具体取决于 flag 的值。
  • 这不是全部代码。 objectIntObjectFloatIsitNumIsitRes 是如何声明和定义的? setRes 函数在 objectInt 返回 true 或 objectInt 返回 false 并且 objectFloat 返回 false 的情况下不返回任何内容。 setNum 函数没有返回语句。具有返回类型且没有返回 spawns demons 的函数,您的代码将永远无法按预期工作。将return .. 语句添加到您的函数中。 l printf 修饰符对 %lf 没有影响,您可以只使用 %f 进行浮点数。

标签: c string function


【解决方案1】:

如果if 条件为真,您的setRes() 函数不会返回值。

【讨论】:

  • 它返回 resf
  • 不,它没有。
  • 那我怎么回来?
  • @Robyyyn 查看代码return resf; 以及为什么它在函数的其他部分中丢失。
  • 我知道它不会在某些部分返回,所以我保留它以确保我返回适当的值
【解决方案2】:

我现在通过在调用 setRes 后使用 atof 将对象转换为浮点数来访问 resf

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 2022-01-26
    • 2020-10-25
    • 1970-01-01
    • 2019-03-12
    • 2021-01-27
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多