Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   unable to understand the error in the following code (http://www.go4expert.com/forums/unable-understand-error-following-code-t24455/)

bsudhir6 9Jan2011 16:02

unable to understand the error in the following code
 
Code:

/* Calculate the tax due or the refund for family based on the following imaginary formula
    1. For each dependent deduct $1,000 from income,
    2.Determine tax rte from the following brackets;
   
    bracket            taxable income                tax rate
            1                                <=10000                            2%
            2                    10001 - 20000                            5%
            3                    30001 - 40000                            7%
            4                    40001 - 50000                            10%
            2                    50001 and up                            15%
    then print the amount of tax or the refund       
    @author:Sudhir
    @Date and Time: 1/9/2011 2:16:25 PM
*/

#include<stdio.h>

#define LOWEST    0000000.00
#define HIGHEST 1000000.00

#define LIMIT1 10000.00
#define LIMIT2 20000.00
#define LIMIT3 30000.00
#define LIMIT4 40000.00
#define LIMIT5 50000.00

#define RATE1 02
#define RATE2 05
#define RATE3 07
#define RATE4 10
#define RATE5 15

#define DEDN_PER_DPNDNT 1000

//Function Declarations
void getData(double* totalIncome, double* taxPaid, int* numOfDpndnts);
void calcTaxes(double totalIncome, double taxPaid, int numOfDpndnts, double* taxableIncome, double* totalTax, double* taxDue);
void printInformation(double totalIncome, double taxPaid, int numOfDpndnts, double totalTax, double paidTax,double taxDue);
double bracketTax(double income, double startLimit, double stopLimit, int rate);

int main(int argc,char *argv[])
{
    //Local Declarations
    int numOfDpndnts;
    double taxDue;
    double taxPaid;
    double totalIncome;
    double taxableIncome;
    double totalTax;
   
    //Statements
    getData(&totalIncome, &taxPaid, &numOfDpndnts);
    calcTaxes(totalIncome, taxPaid, numOfDpndnts, &taxableIncome, &totalTax, &taxDue);
    printInformation(totalIncome, taxableIncome, numOfDpndnts, totalTax, taxPaid, taxDue);
   
    return 0;
}//main

/* ==============================getData()===============================
    This function reads tax data from the keyboard.
   
        pre: nothing
        post: Reads totalIncome, taxPaid, &numOfDpndnts
*/
void getData(double* totalIncome, double* taxPaid, int* numOfDpndnts)
{
    //Statements
    printf("Enter your total income for the year: \n");
    scanf("%lf", totalIncome);
   
    printf("Enter total of payroll deductions: \n");
    scanf("%lf", taxPaid);
   
    printf("Enter the number of dependents: \n");
    scanf("%lf", numOfDpndnts);
   
    return;
}//getData
   
/* ==============================calcTaxes()===============================
    This function calculates the tax due.
   
        pre: Given-Income, numOfDpndnts
        post: Tax Income, total Tax, and tax Due calculated
*/
void calcTaxes(double totalIncome, double taxPaid, int numOfDpndnts, double* taxableIncome, double* totalTax, double* taxDue)
{
    //Statements
    taxableIncome = totalIncome - (numOfDpndnts * DEDN_PER_DPNDNT);
    *totalTax = bracketTax(*taxableIncome, LOWEST, LIMIT1, RATE1) + bracketTax(*taxableIncome, LIMIT1, LIMIT2, RATE2) + bracketTax(*taxableIncome, LIMIT2, LIMIT3, RATE3) + bracketTax(*taxableIncome, LIMIT3, LIMIT4, RATE4) + bracketTax(*taxableIncome, LIMIT4, LIMIT5, RATE5) ;
    *taxDue = *totalTax - taxPaid;
    return;
}//calcTaxes

/* ==============================printInformation()===============================
    This function prints a table showing all information
   
        pre: The parameter list
        post: Prints the table
*/

void printInformation(double totalIncome, double taxPaid, int numOfDpndnts, double totalTax, double paidTax,double taxDue)
{
    //Statements
    printf("\n Total Income:                                                        %10.2f\n", totalIncome);
    printf("\n Number of dependents:                                        %7d\n", numOfDpndnts);
    printf("\n Taxable Income:                                                    %10.2f\n", taxPaid);
    printf("\n Total Tax                                                                %10.2f\n", totalTax);
    printf("\n Tax Already Paid:                                                %10.2f\n", paidTax);
    if(taxDue >= 0.0)
            printf("Tax due:                                                                %10.2f\n", taxDue);
    else
        printf("refund:                                                                %10.2f\n", -taxDue);
   
    return;
}//printInformation   
   
/* ==============================bracketTax()===============================
    This function calculates the tax for particular bracket
   
        pre: The taxable income
        post: Return the tax for particular bracket
*/

double bracketTax(double income, double startLimit, double stopLimit, int rate)
{
    //Local Declarations
    double tax;
   
    //Statements
    if(income <= startLimit)
        tax = 0.0;
    else
        if( income > startLimit && income <= stopLimit)
            tax = (income > stopLimit) * rate /100.00;
        else
            tax = (stopLimit - startLimit) * rate / 100.00;
    return tax;
}// bracketTax

error in visual c++ compiler is
Code:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Tax.c
Tax.c(69) : warning C4996: 'scanf' was declared deprecated
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\stdio.h(295) : see
 declaration of 'scanf'
        Message: 'This function or variable may be unsafe. Consider using scanf_
s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help
 for details.'
Tax.c(72) : warning C4996: 'scanf' was declared deprecated
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\stdio.h(295) : see
 declaration of 'scanf'
        Message: 'This function or variable may be unsafe. Consider using scanf_
s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help
 for details.'
Tax.c(75) : warning C4996: 'scanf' was declared deprecated
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\stdio.h(295) : see
 declaration of 'scanf'
        Message: 'This function or variable may be unsafe. Consider using scanf_
s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help
 for details.'
Tax.c(89) : error C2440: '=' : cannot convert from 'double' to 'double *'


jimblumberg 9Jan2011 20:07

Re: unable to understand the error in the following code
 
For the warning messages you can either use the non-standard function Microsoft recommends scanf_
s in this case or #define _CRT_SECURE_NO_DEPRECATE . Please see this link Security enhancements.

For the error:

Quote:

Tax.c(89) : error C2440: '=' : cannot convert from 'double' to 'double *'
Code:

void calcTaxes(double totalIncome, double taxPaid, int numOfDpndnts, double* taxableIncome, double* totalTax, double* taxDue)
{
    //Statements
    taxableIncome = totalIncome - (numOfDpndnts * DEDN_PER_DPNDNT); // Line 89

Your variable taxableIncome is a pointer to a double and you are trying to assign a double to it. You must add the * in front of taxableIncome.

Also I get a warning on line 75.

Quote:

main.c|75|warning: format ‘%lf’ expects type ‘double *’, but argument 2 has type ‘int *’|
And line 75 is:
Code:

  scanf("%lf", numOfDpndnts);
And numOfDpndnts is an int* not a floating point number. So the format specifier should be "%d".

This warning should also be found by your compiler, but I guess Microsoft is more concerned about "Significant enhancements" that they forget about the real problems.

Jim

lincy 10Jan2011 12:35

Re: unable to understand the error in the following code
 
Code:

#include<stdio.h>

#define LOWEST    0000000.00
#define HIGHEST 1000000.00

#define LIMIT1 10000.00
#define LIMIT2 20000.00
#define LIMIT3 30000.00
#define LIMIT4 40000.00
#define LIMIT5 50000.00

#define RATE1 02
#define RATE2 05
#define RATE3 07
#define RATE4 10
#define RATE5 15

#define DEDN_PER_DPNDNT 1000

//Function Declarations

void getData(double totalIncome, double taxPaid, int numOfDpndnts);
void calcTaxes(double totalIncome, double taxPaid, int numOfDpndnts, double taxableIncome, double totalTax, double taxDue);
void printInformation(double totalIncome, double taxPaid, int numOfDpndnts, double totalTax, double paidTax,double taxDue);
double bracketTax(double income, double startLimit, double stopLimit, int rate);

void main(int argc,char argv[])
{
    //Local Declarations
    int numOfDpndnts;
    double taxDue;
    double taxPaid;
    double totalIncome;
    double taxableIncome;
    double totalTax;
   
    //Statements

    getData(&totalIncome, &taxPaid, &numOfDpndnts);
    calcTaxes(totalIncome, taxPaid, numOfDpndnts, &taxableIncome, &totalTax, &taxDue);
    printInformation(totalIncome, taxableIncome, numOfDpndnts, totalTax, taxPaid, taxDue);
   
 
}//main

/* ==============================getData()===============================
    This function reads tax data from the keyboard.
   
        pre: nothing
        post: Reads totalIncome, taxPaid, &numOfDpndnts
*/

void getData(double totalIncome, double taxPaid, int numOfDpndnts)
{
    //Statements

    printf("Enter your total income for the year: \n");
    scanf("%lf", totalIncome);
   
    printf("Enter total of payroll deductions: \n");
    scanf("%lf", taxPaid);
   
    printf("Enter the number of dependents: \n");
    scanf("%lf", numOfDpndnts);
   
    return;
} //getData
   
/* ==============================calcTaxes()===============================
    This function calculates the tax due.
   
        pre: Given-Income, numOfDpndnts
        post: Tax Income, total Tax, and tax Due calculated
*/

void calcTaxes(double totalIncome, double taxPaid, int numOfDpndnts, double taxableIncome, double totalTax, double taxDue)
{
    //Statements

    taxableIncome = totalIncome - (numOfDpndnts * DEDN_PER_DPNDNT);
    totalTax = bracketTax(taxableIncome, LOWEST, LIMIT1, RATE1) + bracketTax(*taxableIncome, LIMIT1, LIMIT2, RATE2) + bracketTax(taxableIncome, LIMIT2, LIMIT3, RATE3) + bracketTax(taxableIncome, LIMIT3, LIMIT4, RATE4) + bracketTax(taxableIncome, LIMIT4, LIMIT5, RATE5) ;
    taxDue = totalTax - taxPaid;
    return;
}//calcTaxes

/* ==============================printInformation()===============================
    This function prints a table showing all information
   
        pre: The parameter list
        post: Prints the table
*/

void printInformation(double totalIncome, double taxPaid, int numOfDpndnts, double totalTax, double paidTax,double taxDue)
{
    //Statements

    printf("\n Total Income:%10.2f\n", totalIncome);
    printf("\n Number of dependents:%7d\n", numOfDpndnts);
    printf("\n Taxable Income:%10.2f\n", taxPaid);
    printf("\n Total Tax %10.2f\n", totalTax);
    printf("\n Tax Already Paid:%10.2f\n", paidTax);
    if(taxDue >= 0.0)
            printf("Tax due:%10.2f\n", taxDue);
    else
        printf("refund:%10.2f\n", -taxDue);
   
    return;
}//printInformation   
   
/* ==============================bracketTax()===============================
    This function calculates the tax for particular bracket
   
        pre: The taxable income
        post: Return the tax for particular bracket
*/


void double bracketTax(double income, double startLimit, double stopLimit, int rate)
{
    //Local Declarations
    double tax;
   
    //Statements
    if(income <= startLimit)
        tax = 0.0;
    else
        if( income > startLimit && income <= stopLimit)
            tax = (income > stopLimit) * rate /100.00;
        else
            tax = (stopLimit - startLimit) * rate / 100.00;
    return (0);
}// bracketTax

not sure about program ,just try


All times are GMT +5.5. The time now is 23:46.