为什么我的浮动函数没有按预期工作?

Why doesnt my float function work as intended?

我在 startShare 的 if 语句中最后的函数 priceDifference 没有返回计算的浮点数并在控制台中显示它。我的其他功能正常工作,只是那个功能出了问题,我不知道为什么。

例如,当我传递数字 2105.11 & 1999.55 时,它 returns 1999.55???

#include <stdio.h>

void shareStart();
char askMe();
char askMe2();
char askMe3();
char askAgain();
int getShares();
int getMoney();
float getStartingInvestment();
float getSoldInvestment();
float getPrice();
float shareDivide(float, int);
float shareMultiply(float, int);
float priceDifference(float, float);

int main()
{
    shareStart();
    return 0;
}

void shareStart()
{
    do {
        if(askMe() == 'y') {
         printf("You could buy: %f shares.\n", shareDivide(getPrice(), getMoney()));
        } else if(askMe2() == 'y') {
          printf("Shares cost: %f\n", shareMultiply(getPrice(), getShares()));
        } else if(askMe3() == 'y') {
            printf("Profit/Loss is: %f\n", priceDifference(getStartingInvestment(), getSoldInvestment()));
        }
    } while(askAgain() == 'y');
}

char askMe()
{
    char ask;
    printf("See how many shares to buy? 'y/n'\n");
    scanf("%s", &ask);
    return ask;
}

char askMe2()
{
    char ask;
    printf("See total cost of shares? 'y/n'\n");
    scanf("%s", &ask);
    return ask;
}

char askMe3()
{
    char ask;
    printf("See profit/loss difference between trades? 'y/n'\n");
    scanf("%s", &ask);
    return ask;
}

char askAgain()
{
    char ask;
    printf("Would you like to run the program again? 'y/n'\n");
    scanf("%s", &ask);
    return ask;
}

int getShares()
{
    int ask;
    printf("How many shares are you using?\n");
    scanf("%d", &ask);
    return ask;
}

int getMoney()
{
    int money;
    printf("How much money are you using?\n");
    scanf("%d", &money);
    return money;
}

float getStartingInvestment() 
{
    float money;
    printf("How much money did your shares cost?\n");
    scanf("%f", &money);
    return money;
}

float getSoldInvestment()
{
    float money;
    printf("What did you sold your shares for?\n");
    scanf("%f", &money);
    return money;
}

float getPrice()
{
    float price;
    printf("Whats the price of a share?\n");
    scanf("%f", &price);
    return price;
}

float shareDivide(float price, int money) 
{
    return money / price;
}

float shareMultiply(float price, int shares) 
{
    return shares * price;
}

float priceDifference(float start, float sold)
{
    return sold - start;
}

我不知道它到底是如何工作的,但评论中所述的答案是将所有询问函数中的 scanf 函数格式说明符更改为“%c”。

Execution with "%s" specifier ~~ Execution with " %c" specifier


我 运行 在我的膝上型电脑命令提示符下使用说明符“%s”的程序,它工作正常。有些东西告诉我在线编译器导致它意外工作。

fscanf%s 规范告诉它读取一系列非白色 space 字符并将它们与终止空字符一起存储在 space 对于参数指向的字符。

ask 定义为 char ask 时,传递 &ask 传递指向单个字符的 space 的指针。这不足以容纳从输入扫描的字符和终止空字符。因此,您的程序名义上会尝试将空字符写入未分配给它的内存。这会以多种方式破坏您的程序。

fscanf 字符串更改为 %c 告诉它读取单个字符并将其存储在参数指向的位置,没有终止空字符。这解决了这个问题,因为数据只写入正确分配的 space.