NSwanson7
NSwanson7

Reputation: 173

invalid operands to binary / (have ‘float *’ and ‘int’)?

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

Answers (2)

haccks
haccks

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

abelenky
abelenky

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

Related Questions