返回错误值的函数[关闭]

Posted

技术标签:

【中文标题】返回错误值的函数[关闭]【英文标题】:Function returning wrong values [closed] 【发布时间】:2021-07-17 06:08:05 【问题描述】:

我正在学习用 C 编写代码,但遇到了函数问题,当您输入值时,它会为您提供 0.00 + randomnumber.000000000000000000000000i 我使用相同的 printf 来尝试查找代码内部是否发生了某些事情,但问题似乎出在函数 func_complejo 本身中。我做错了什么?

#include <stdio.h> //entrada y salida

typedef struct

    float real, imaginario;
 complejo;

complejo func_complejo(void);
void func_mostrarComplejo(complejo complejoOut);

int main()

    complejo complejoAux;

    complejoAux = func_complejo();
    printf("\nEl numero ingresado es %.2f + %.2fi", &complejoAux.real, &complejoAux.imaginario);
    func_mostrarComplejo(complejoAux);

    return 0;


complejo func_complejo(void)

    complejo complejoIn;
    printf("\nIngrese la parte real de un complejo: ");
    scanf("%f", &complejoIn.real);
    printf("\nAhora ingrese la parte imaginaria de un complejo: ");
    scanf("%f", &complejoIn.imaginario);

    printf("\nEl numero ingresado es %.2f + %.2fi", &complejoIn.real, &complejoIn.imaginario);
    return complejoIn;


void func_mostrarComplejo(complejo complejoOut)

    printf("\nEl numero ingresado es %.2f + %.2fi", &complejoOut.real, &complejoOut.imaginario);


【问题讨论】:

【参考方案1】:

在您的每个printf 调用中,您都传递了一个float * 以匹配一个%f 格式说明符,该说明符需要一个floatdouble。格式说明符不匹配会触发 undefined behavior,这就是您看到结果的原因。

您无需传递printf 的地址。 scanf 函数需要地址,以便它可以写入相关变量。

这些错误可以通过去掉每个 printf 调用中的地址运算符来修复:

printf("\nEl numero ingresado es %.2f + %.2fi", complejoAux.real, complejoAux.imaginario);

【讨论】:

以上是关于返回错误值的函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要 void 函数? [关闭]

创建返回实现 serde::Deserialize 的值的函数时的生命周期错误

有返回值的函数,如果包含try/catch块,经常会出现没有return的错误

Excel返回#NUM!错误值原因及解决方法

shell脚本函数返回值的三种方式

TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句