1. ## need help calling a function, please.

I do not understand how to call a function. I need to call functions "insert", "remove", and "display." Any help would be much appreciated. Thanks.
Code:
```#include <stdio.h>

void insert(float x, int p, int n, int d, int q);
void remove(float x, int p, int n, int d, int q);
void display (float x, int p, int n, int d, int q);

int main(void)
{
int pennies, nickels, dimes, quarters, p,n,d,q;
pennies=0;
nickels=0;
dimes=0;
quarters=0;
float x = pennies + 5*nickels + 10*dimes + 25*quarters;
x =  (float)x/100;

printf( " %d quarters + %d dimes + %d nickels + %d pennies = \$%d \n", quarters, dimes, nickels, pennies, x);
printf("insert");
scanf("%d%d%d%d", &p, &n, &d, &q);
pennies += p;
nickels += n;
dimes += d;
quarters += q;
void insert (float x + p + (5*n) + (10*d) + (25*q));
x = float x/100;
printf( " %d quarters + %d dimes + %d nickels + %d pennies = \$%d \n", quarters, dimes, nickels, pennies, x);

printf("remove");
scanf("%d%d%d%d", &p, &n, &d, &q);
pennies -= p;
nickels -= n;
dimes -= d;
quarters -= q;
void remove ( float x - p - (5*n) - (10*d) - (25*q));
x = float x/100;
printf( " %d quarters + %d dimes + %d nickels + %d pennies = \$%d \n", quarters, dimes, nickels, pennies, x);

}```

2. But you do understand how to call a function, you do so every time you use printf or scanf. They are functions provided by the standard C library. The format is
Code:
```function_name(param1, param2, param3);
// For example:
insert(x+ p + (5*n) + (10*d) + (25*q));```
You need to remove the return type (i.e. the "void") and the parameter type (i.e. the "float"), from the calls on lines 31 and 44. They are only used in function declarations and definitions.

3. Am I moving in the right direction? I changed a lot. Thanks.
Code:
```#include <stdio.h>

insert (x + p + (5*n) + (10*d) + (25*q));
remove (x - p - (5*n) - (10*d) + (25*q));
display (p, n, d, q, x);

int main(void)
{
int pennies, nickels, dimes, quarters, p,n,d,q;
pennies=0;
nickels=0;
dimes=0;
quarters=0;
float x = 0

printf( " %d pennies + %d nickels + %d dimes + %d quarters = \$%d \n", pennies, nickels, dimes, quarters, x);
printf("insert");
scanf("%d%d%d%d", &p, &n, &d, &q);
insert("%f, %d, %d, %d, %d", x, p, n, d, q);
display("%d, %d, %d, %d, %f", p, n, d, q, x );

printf("remove");
scanf("%d%d%d%d", &p, &n, &d, &q);
insert("%f, %d, %d, %d, %d", x, p, n, d, q);
display ("%d, %d, %d, %d, %f", p, n, d, q, x);
}```

4. Now you've ruined the function declarations/definitions.

Code:
```int sum(int x, int y);  // <-- function declaration (note semicolon)
//     return type:  returns an integer
//     argument list:  accepts two integers
int main(void)
{
int total;

total = sum(3,4);   // <-- function call
//     return type not included in function call
//     arguments sent that match the argument list
//        in the function declaration and definition

return 0;
}

int sum(int x, int y)  // <-- function definition (note no semicolon)
{
return x + y;
}```
Or, alternatively, you can define the function above "main()" and leave out the explicit declaration:

Code:
```int sum(int x, int y)  // <-- function definition (note no semicolon)
{
return x + y;
}

int main(void)
{
int total;

total = sum(3,4);

return 0;
}```

5. No, not every function takes a string of format specifiers. Also, your function prototypes were working before, but you changed them to function calls.

Lines 4 and 5 (in post #3) are examples of you correctly calling the insert and remove functions, except you must call a function from within another function.

My point was, you know how to call functions. Note, you have never had to put a type (like int, void, float) before printf or scanf when you use them. Nor have you ever had to put a type like char * before the parameters.

This is wrong (the red stuff doesn't belong):
Code:
`int printf(char * "Notice the incorrect return type and parameter types, they don't belong!\n");`
The following is the correct way. This is how you have been using printf and scanf all along.
Code:
`printf("Notice, this is correct, there is no return type or parameter types.\n");`
Look at the example in my previous post, I showed you exactly how to call the insert function. remove and display are similar.

I think you need to read some tutorials. We have one here: Functions in C - Cprogramming.com. You should also Google for several others too, to get different viewpoints and a more complete picture.

6. Your prototypes should have return types and parameter types.

7. Ok. I changed it again. I have been looking on google and at my notes and in my book for over 5 hours today, and I am still not getting it. I foolishly took this class online and help is impossible to get. Thanks again.
Code:
```#include <stdio.h>

int insert (int p, int n, int d, int q, float x)//
{
return x + p + (5*n) + (10*d) + (25*q);
}
int remove (int p, int n, int d, int q, float x)//
{
return x - p + (5*n) - (10*d) - (25*q);
}
int display (int p, int n, int d, int q, float x)//
{
return p, n, d, q, x;
}

int main(void)
{
int pennies, nickels, dimes, quarters, p,n,d,q;
pennies=0;
nickels=0;
dimes=0;
quarters=0;
float x = 0;

printf( " %d pennies + %d nickels + %d dimes + %d quarters = \$%f \n", pennies, nickels, dimes, quarters, x);
printf("insert");
scanf("%d%d%d%d", &p, &n, &d, &q);
insert("%f, %d, %d, %d, %d");
display("%d, %d, %d, %d, %f");

printf("remove");
scanf("%d%d%d%d", &p, &n, &d, &q);
insert("%f, %d, %d, %d, %d");
display ("%d, %d, %d, %d, %f");

return 0;
}```

8. cfanatic-
can i not use the layout i have above?

9. Originally Posted by rosemary
cfanatic-
can i not use the layout i have above?
If you're referring to putting the function definitions above "main()", you can - see my post #4 above.

10. matticus-
could you help me understand what is wrong with these two lines? thanks.

Code:
```insert("%f, %d, %d, %d, %d");
display("%d, %d, %d, %d, %f");```

11. Originally Posted by rosemary
matticus-
could you help me understand what is wrong with these two lines? thanks.

Code:
```insert("%f, %d, %d, %d, %d");
display("%d, %d, %d, %d, %f");```
Here, you are passing one parameter -- a string -- to insert and display. Those functions don't know what to do with that string, nor do they know what %f and %d mean.

Those functions each take 5 parameters (4 ints and a float). You need to pass in the correct integer and float values, in the correct order. Change line 31 and 39 to look like this:
Code:
`insert(pennies, nickels, dimes, quarters, x)`
Note, your display function should actually display something. Try using printf inside that function, to print out the value of p, n, d, q and x:
Code:
```printf("p = %d\n", p);
printf("n = %d\n", n);
...```

12. Thanks anduril!

@rosemary, if you're really interested in learning and not just getting a good grade somewhere, I'd recommend you play around with some small, simple programs using functions to get the hang of it. The code I provided in post #4 is a fully working program (though with no output). That might help you see how all the details of a function works. Then mix up the code a bit, seeing if you can make another function that does multiplication of two numbers, etc. Writing several small, simple programs exercising concepts you're learning will give you a great understanding of those concepts. Then you can scale up the programs to deal with more [relatively] complicated functions as you're doing now.

13. matticus-
actually, i did this assignment already without functions, and it worked, but the professor wanted it with functions. it is too late for me to turn it in, i really want to understand how functions work. i truly have been working on this for roughly 6 hours today. i agree, i need to understand more basic concepts first, but this is what he is expecting me understand, so i am "trying" to figure it out. thanks again for all your help.

14. I still can't get it to work. This is where I am at. Thanks everyone.
Code:
```#include <stdio.h>

int insert (float x, int p, int n, int d, int q)//
{
return (x + p + (5*n) + (10*d) + (25*q))/100;
}
int remove (float x, int p, int n, int d, int q)//
{
return (x - p - (5*n) - (10*d) - (25*q))/100;
}
int display (int p, int n, int d, int q, float x)//
{
return printf("p = %d\n", p);
printf("n = %d\n", n);
printf("d = %d\n", d);
printf("q = %d\n", q);
printf("x = %f\n", x);
}

int main(void)
{
int pennies, nickels, dimes, quarters, p,n,d,q;
pennies=0;
nickels=0;
dimes=0;
quarters=0;
float x = 0;

printf( " %d pennies + %d nickels + %d dimes + %d quarters = \$%d\n", pennies, nickels, dimes, quarters, x);
printf("insert");
scanf("%d%d%d%d", &p, &n, &d, &q);
insert(pennies, nickels, dimes, quarters, x);
display(pennies, nickels, dimes, quarters, x);

printf("remove");
scanf("%d%d%d%d", &p, &n, &d, &q);
remove(pennies, nickels, dimes, quarters, x);
display (pennies, nickels, dimes, quarters, x);

return 0;
}```

15. I have been looking on google and at my notes and in my book for over 5 hours today,
Banging your head against a concept rarely works. For example I'm crap at writing essays or other term papers, but I don't spend hours agonizing over them per day. It really is a rather poor study habit for anything.

Functions are actually rather simple. We have a tutorial, my goal is to present you with enough information to make sense of the tutorial, and with any luck I can do that by breaking down one function for you.
Code:
`void insert(int x, int p, int n, int d, int q);`
Really, if you want to understand calling functions you really only need to understand what the the prototype can tell a person.

The very first word, void, is the type of the value returned to the caller. Unless the return type is void, a variable should be on the left hand side of the assignment operator to store the value. (This is the easiest expression to teach to handle return values. The other way is actually pretty dependent on context and I don't want to teach context.)

Then the next word is insert, the name of the function.

Then you have the parameter list in parentheses. Each of the parameters should receive an argument of the same type, whether that is a variable name or other expression resulting in a value of the appropriate type. So you must pass in five integers to complete this function call. You have to copy the parentheses. The other five integers will probably look unlike the integers in the parameter list, and this is normal. The parameter list is a visual reference for you, and a technical reference for the compiler. It will use the parameter list to enforce various rules regarding the C type system and function invocation.

The white space can be used to determine what part is what in the future. If you proceed from left to right when you read, you can pick apart all the parts of the function. Once you know what all the parts are, you need to write the statement to make the call. Write out all the parts and conclude the statement with the semicolon.

That is not all there is to know. You still have yet to understand the difference between pass by value semantics and reference semantics, which is an important omission. But you do not have to understand pass by reference semantics until you start the unit on pointers.

Functions in C - Cprogramming.com

I still can't get it to work. This is where I am at.
It looks like you aren't assigning the return value of any of your functions to x.