0

Hi, I am currently learning how to program, and have a code below:

int voltage;
    printf("Voltage\t\tSoC\tDescription\n");
    printf("-------\t\t---\t-----------\n");
    for (voltage = voltage_min; voltage <= voltage_max; voltage = voltage + step_size_variable){
        printf("%d\t\t%0.3d%%\n", voltage, ((voltage - 3000)/1200)*100);
    } 

When I run it, the program outputs only 0.00%s, and is not calculating the voltage according to the equation that is inside in the last printf(). Is there any advice to this work...?

7
Contributors
9
Replies
11
Views
4 Years
Discussion Span
Last Post by pyTony
0

See, if it confuses you so much then maybe separate calculation and printing, and print result variable only.
Also can write function to calculate

Edited by Sokurenko: more

0

I dislike working with floating point numbers too, but this looks like a case where they would make sense.

Alternately, you could get slightly better results by moving the 100 multiplier in front so your intermediate value doesn't dip to zero.

(100 * (voltage - 3000) / 1200)
0

Thank you guys for your advices. I haved moved the equation out of the printf(), and declared a floating point variable like below. The program is doing the math, but is truncating the results, even when I force it to disply 1 decimal point. How can I fix it? I also posted the entire code below for reference.

for (voltage = voltage_min, battery_remain = ((voltage - 3000) * 100) /1200; voltage <= voltage_max; voltage = voltage + step_size_variable, battery_remain = ( (voltage + step_size_variable - 3000) * 100) / 1200)






#include <stdio.h>
#include <math.h>

int main()
{

    printf("Welcome to the Battery State Of Charge (SoC) Table Generator\n");
    printf("------------------------------------------------------------\n");

    //ask the user for battery information
    int voltage_min = 0;
    int voltage_max = 0;
    int step_size_variable = 0;
    printf("Enter min & max voltages (mV) to show in the table: ");
    scanf("%d%d", &voltage_min, &voltage_max);
    printf("Enter the step size between voltages: ");
    scanf("%d", &step_size_variable);

    //determine the variables and constants needed to calculate voltage
    int voltage; 
    float battery_remain;
    const int voltage_min_allowance = 3000;
    const int voltage_max_allowance = 4200;
    const int OVERCHARGE_VOLTAGE = 4250;
    printf("Voltage\t\t   SoC\tDescription\n");
    printf("-------\t\t------\t-----------\n");

    //calculate the voltage
    for (voltage = voltage_min, battery_remain = ((voltage - 3000) * 100) /1200; voltage <= voltage_max; voltage = voltage + step_size_variable, battery_remain = ( (voltage + step_size_variable - 3000) * 100) / 1200)
    {
        if(voltage < voltage_min_allowance){
            battery_remain = 0; 
        }
        if(voltage >= voltage_max_allowance){
            battery_remain = 100;
        }
        if(battery_remain >= 0 && battery_remain < 10){
            printf("%dmV\t\t%6.1f%%\tRecharge Soon!\n", voltage, battery_remain);
        }
        if(battery_remain >= 10 && battery_remain < 25){
            printf("%dmV\t\t%6.1f%%\tLow!\n", voltage, battery_remain);
        }
        if(battery_remain >= 25 && battery_remain < 90){
            printf("%dmV\t\t%6.1f%%\tGood!\n", voltage, battery_remain);
        } 
        if(battery_remain >= 90 && battery_remain < 100){
            printf("%dmV\t\t%6.1f%%\tFull!\n", voltage, battery_remain);
        }
        if(battery_remain >= 100 && voltage < OVERCHARGE_VOLTAGE){
            printf("%dmV\t\t%6.1f%%\tFull!\n", voltage, battery_remain);
        }
        if(voltage >= OVERCHARGE_VOLTAGE){
            printf("%dmV\t\t%6.1f%%\tWARNING: OVERCHARGED!\n", voltage, battery_remain);
        }
    } 

    return 0;
}
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.