# turbo c calculations not right

i don't know whats wrong, but it wont show the correct answers or the computation. though it has no errors
this is my source code

#include
#include

float workhrs, overtime, salary, tax, tsalary;
long int rate;
char name[80],choose;

try()
{
clrscr();
textcolor (3);
cprintf("
How many hours have you been working? ");
scanf("%f",&workhrs);

if(workhrs>=100 && workhrs<=25)
{
printf("
WORK HOUR is not VALID!");
getch();
try();
}
else
{
textcolor (3);
printf("
scanf("%d",&rate);
textcolor (3);
cprintf("

Press any key to compute salary...");
getch();
if(workhrs>40)
{
if(workhrs>=40 && workhrs<=50)
{
overtime=workhrs-40;
salary=(40*rate)+(overtime*40);
}
else
{
overtime=workhrs-40;
salary=(rate*40)+(overtime*40)+200;
}
}
else
{
salary=workhrs*rate;
}

clrscr();

if(salary>8000)
{
tax=salary*.15;
tsalary=salary-tax;

textcolor (15);
cprintf("
Hello %s! Your salary for this month is P%.2f", name, salary);
getch();
clrscr();
gotoxy(1,15);
textcolor (15);
cprintf("
There is a 15 percent tax deduction which is P%.2f",tax);
getch();
clrscr();
gotoxy(1,15);
printf("
Your total salary with 15 percent tax deduction is P%.2f",tsalary);
getch();
clrscr();

}

else
{
printf("
Hello %s %s! Your salary for this month is P%.2f", name, salary);
getch();
}

}
}

main()
{
clrscr();
textcolor (3);
printf("
Enter name: ");
gets(name);
try();
clrscr();
gotoxy(30,45);

printf("
Would you like to try again? Y/N

");
scanf("%s",&choose);
if (choose=='y')
main();
else
{gotoxy(33,11);
textcolor (15);
cprintf("HAVE A NICE DAY!");
getch();}
;

}

• [color=Blue]Turbo C has a very easy to use debugger - I am sure if you use it - you will see what is wrong. Set a breakpoint AFTER any input, like that:[/color]
[code]
scanf ("%f", &value);
<-- set bkpt on this line and chk 'value'
[/code]
[color=Blue]When program stops in debugger on the next line inspect the variable 'value' and verify that whatever you entered is realy there. Do the same AFTER calculations - verify that all calculations are sound. TC debugger has WATCH window and INSPECT window - see the menu bar items - you will find how to open them. WATCH allows to see how variable changes on every line of the program - you basically watch the variable and continue step line-by-line. INSPECT - once open - must be closed to continue stepping. To put a variable into one of these windows - set a cursor on the variable and use menu item to open appropriate panel.[/color]
• Please use code tags when posting your code samples. Here is your program reposted with code tags provided (and formatted).
[code]
#include
#include

float workhrs, overtime, salary, tax, tsalary;
long int rate;
char name[80],choose;

try()
{
clrscr();
textcolor (3);
cprintf("
How many hours have you been working? ");
scanf("%f",&workhrs);

if(workhrs>=100 && workhrs<=25)
{
printf("
WORK HOUR is not VALID!");
getch();
try();
}
else
{
textcolor (3);
printf("
scanf("%d",&rate);
textcolor (3);
cprintf("

Press any key to compute salary...");
getch();
if(workhrs>40)
{
if(workhrs>=40 && workhrs<=50)
{
overtime=workhrs-40;
salary=(40*rate)+(overtime*40);
}
else
{
overtime=workhrs-40;
salary=(rate*40)+(overtime*40)+200;
}
}
else
{
salary=workhrs*rate;
}

clrscr();

if(salary>8000)
{
tax=salary*.15;
tsalary=salary-tax;

textcolor (15);
cprintf("
Hello %s! Your salary for this month is P%.2f", name, salary);
getch();
clrscr();
gotoxy(1,15);
textcolor (15);
cprintf("
There is a 15 percent tax deduction which is P%.2f",tax);
getch();
clrscr();
gotoxy(1,15);
printf("
Your total salary with 15 percent tax deduction is P%.2f",tsalary);
getch();
clrscr();
}
else
{
printf("
Hello %s %s! Your salary for this month is P%.2f", name, salary);
getch();
}

}
}

main()
{
clrscr();
textcolor (3);
printf("
Enter name: ");
gets(name);
try();
clrscr();
gotoxy(30,45);

printf("
Would you like to try again? Y/N

");
scanf("%s",&choose);
if (choose=='y')
main();
else
{
gotoxy(33,11);
textcolor (15);
cprintf("HAVE A NICE DAY!");
getch();
}

}[/code]

1) You are using recursion in a manner I believe to be inappropriate. You should be using loops instead of recursion when a user enters an invalid amount of work hours or when the user wishes to repeat the program. In particular, you should never recursively call [italic]main[/italic].

2) Don't use [italic]gets[/italic]. It is dangerous as it does not prevent the user from entering more characters than is possible for the array to hold. You should instead prefer [italic]fgets[/italic] which allows you to specify the maximum number of characters your buffer can hold.

3) Avoid compiler/OS specific functions wherever possible.

4) Upgrade yourself to a better/newer compiler. Turbo C was around back when most of mankind still lived in caves. There are a number of free ones out there that have been created this millennium.

5)
[code]if(workhrs>40)
{
if(workhrs>=40 && workhrs<=50)
{
overtime=workhrs-40;
salary=(40*rate)+([color=Red]overtime*40[/color]);
}
else
{
overtime=workhrs-40;
salary=(rate*40)+([color=Red]overtime*40[/color])+200;
}
}[/code]
Shouldn't overtime be calculated as [b]overtime*rate*1.5[/b] (for time-and-a-half).

6)
[code]else
{
printf("
Hello [color=Red][b]%s %s[/b][/color]! Your salary for this month is P[color=Red][b]%.2f[/b][/color]", [color=Blue][b]name[/b][/color], [color=Blue][b]salary[/b][/color]);
getch();
}
[/code]
Pay attention to how many format specifiers you are using and how many additional arguments you are passing to [italic]printf[/italic].
• This post has been deleted.
• This post has been deleted.