c - C 中使用指针的函数无法返回正确的值

标签 c

这是一个计算所有参与投注的 friend 的奖金的程序。奖励是根据每个人贡献了多少金钱而定的。但我创建的函数全部返回 0.0000。

一本小字典:

  • 奖金=奖品
  • posta = 每个 friend 的贡献

 

int main(){
    int exerc;

    printf("Digite o numero do exercicio desejado: ");
    printf("\n");
    scanf("%d", &exerc);

    switch (exerc){
        case 2:{
            float aposta1, aposta2, aposta3, premio;

            printf("Digite respectivamente o valor que cada um apostou: ");
            scanf("%d %d %d", &aposta1, &aposta2, &aposta3);
            printf("Digite o valor do premio: ");
            scanf("%d", &premio);

            void exercicio2(float *, float*, float*, const float*);
            exercicio2(&aposta1, &aposta2, &aposta3, &premio);

            printf("O valor que o primeiro apostante recebera e de: %f", aposta1);
            printf("\nO valor que o segundo apostante recebera e de: %f", aposta2);
            printf("\nO valor que o terceiro apostante recebera e de: %f", aposta3);

        }
    }
    return 0;
}

void exercicio2(float *ap1, float *ap2, float *ap3, const float *premio){
    float total;

    total = *ap1 + *ap2 + *ap3;

    *ap1 = (*ap1/total) * (*premio);
    *ap2 = (*ap2/total) * (*premio);
    *ap3 = (*ap3/total) * (*premio);
}

输入(投注)aposta1 = 50、aposta2 = 25、aposta3 = 25 和 premio(prize) = 1000 的预期值为:ap1 = 500、ap2 = 250、ap3 = 250。

但它正在发生:

"C:\Users\Marco Antonio\CLionProjects\untitled\cmake-build-debug\untitled.exe"
Digite o numero do exercicio desejado: 2
Digite respectivamente o valor que cada um apostou:50 25 25
Digite o valor do premio:1000
O valor que o primeiro apostante recebera e de: 0.000000
O valor que o segundo apostante recebera e de: 0.000000
O valor que o terceiro apostante recebera e de: 0.000000

最佳答案

更改格式说明符( %d%f )将解决该问题:

scanf("%d %d %d", &aposta1, &aposta2, &aposta3);
scanf("%d", &premio);

scanf("%f %f %f", &aposta1, &aposta2, &aposta3);
scanf("%f", &premio);

问题是您正在输入一个 float ,而您的程序正在读取该整数。在这种情况下,行为是未定义的。请看一下SO question and it's answer关于格式说明符和未定义的行为。

标准规定:

If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

关于c - C 中使用指针的函数无法返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728028/

相关文章:

第一次 scanf 后 C 程序崩溃

c - 从命令行打开的 .txt 文件中读取整数

c - msgrcv 获取空白消息

C - 如何修复此代码中的 printf 工作?

C 中表示指针大小的正确类型?

c - 为什么“while(!feof(file))”总是错误的?

c - 如何通过 CompilerType #ifdef ?海湾合作委员会或 VC++

c - 为什么我在创建着色器类型 35663 时遇到运行时错误

c++ - 我可以用 X64 为 ARM 构建 gcc 吗?

c - 这个#define 相当于C 中的这个变量定义吗?