【问题标题】: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);
}

【问题讨论】:

    标签: c function struct


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多