Reputation: 173
I need to pass by reference for my class. I'm getting the error in the title, but only for the functions divideByTweleve and multiplyByEleven. Why is that? What am I doing wrong? Please help me figure this out.
#include <stdio.h>
void displayMenu();
float addTen (float* number);
float divideByTwelve(float* number);
float subtractSixteen(float* number);
float multiplyByEleven(float* number);
int menu;
float number, finalNumber;
float* ptr_number;
int main (void)
{
float* ptr_number=NULL;
ptr_number=&number;
printf("Please enter a number : ");
scanf("%f", &number);
displayMenu();
scanf("%d", &menu);
do {
printf("\nEnter 5 to see final number\n");
scanf("%d",&menu);
switch (menu)
{
case 1: number=addTen(ptr_number);
break;
case 2: number=divideByTwelve(ptr_number);
break;
case 3: number=subtractSixteen(ptr_number);
break;
case 4: number=multiplyByEleven(ptr_number);
break;
}
printf("Your number is: %.2f \n", number);
}while(menu!=5);//close of the do-while loop
}
void displayMenu()
{
printf("How would you like to manipulate your number\n");
printf("1. Add 10\n");
printf("2. Divide by 12\n");
printf("3. Subtract 16\n");
printf("4. Multiply by 11\n");
}
float addTen (float* number)
{
ptr_number=ptr_number+10;
}
float divideByTwelve (float* number)
{
ptr_number=ptr_number/12;
}
float subtractSixteen(float* number)
{
ptr_number=ptr_number-16;
}
float multiplyByEleven(float* number)
{
ptr_number=ptr_number*11;
}
Upvotes: 0
Views: 7172
Reputation: 106012
Because you are not returning float
values from these functions. If you want to pass a pointer to your functions then you should do this as
float divideByTwelve (float *)
{
*ptr_number= *ptr_number/12;
return *ptr_number;
}
But you have declared number
as global variable, so no need to pass a pointer to these function. Just pass the number
itself`;
float divideByTwelve (float number)
{
return number / 12;
}
Upvotes: 0
Reputation: 64682
Here is one of your (many) issues.
You declare addTen
as:
float addTen (float* number);
And call it as:
number=addTen(ptr_number);
Which clearly indicates it returns a value.
Now, do you see a return statement in the function definition?
float addTen (float* number)
{
ptr_number=ptr_number+10; // No return statement!!
}
Next up, all your function take a float*
as a parameter, which you should read as "Pointer to a Floating point number". Note that a pointer is not the same thing as the value itself.
To get from a pointer to a value, you need to "de-reference" it:
float addTen (float* number)
{
*ptr_number = *ptr_number + 10;
}
The star (*
) before each ptr_number
means to go from the pointer back to the actual value.
Before, you were trying to add 10 to a pointer.
(that is valid, but not appropriate in the current context)
Now, with the *
, you're adding 10 to the value stored at the pointed-to location.
Ultimately, here's my corrected version of your code
void displayMenu();
void addTen (float* number);
void divideByTwelve(float* number);
void subtractSixteen(float* number);
void multiplyByEleven(float* number);
int main (void)
{
int menu;
float number;
printf("Please enter a number : ");
scanf("%f", &number);
displayMenu();
scanf("%d", &menu);
do {
printf("\nEnter 5 to see final number\n");
scanf("%d",&menu);
switch (menu)
{
case 1: addTen(&number); break;
case 2: divideByTwelve(&number); break;
case 3: subtractSixteen(&number); break;
case 4: multiplyByEleven(&number); break;
}
printf("Your number is: %.2f \n", number);
}while(menu!=5);//close of the do-while loop
printf("Your FINAL number is: %.2f \n", number);
}
void displayMenu()
{
printf("How would you like to manipulate your number\n");
printf("1. Add 10\n");
printf("2. Divide by 12\n");
printf("3. Subtract 16\n");
printf("4. Multiply by 11\n");
}
void addTen (float* ptr_number)
{
*ptr_number = *ptr_number+10;
}
void divideByTwelve (float* ptr_number)
{
*ptr_number = *ptr_number/12;
}
void subtractSixteen(float* ptr_number)
{
*ptr_number = *ptr_number-16;
}
void multiplyByEleven(float* ptr_number)
{
*ptr_number = *ptr_number*11;
}
Upvotes: 4