簡體   English   中英

函數未使用C中的指針返回正確的值

[英]Function doesn't return correct value using pointers in C

這是一個計算為所有下注的朋友計算獎金的程序。 獎勵基於每個人用錢捐款多少。 但是我創建的函數將全部返回0.0000。

一些字典:

  • 獎金=獎金
  • aposta =每個朋友的貢獻

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);

問題是您輸入的是浮點數,而程序正在讀取整數。 在這種情況下,行為是不確定的。 請看一個SO問題,它是有關格式說明符和未定義行為的答案

標准規定:

如果任何參數都不是相應轉換規范的正確類型,則行為未定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM