这是一个计算所有参与投注的 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/