- 1

How bad am I messing up functions.

i decided to.rework it without the function. Thanks to those who helped for the knowledge on how to make it work. https://code.sololearn.com/ctW3qJ83g7Ic/?ref=app

19th Mar 2022, 9:20 PM
Karl Marx
Karl Marx - avatar
26 odpowiedzi
- 7
Print("I don't know how to code")
20th Mar 2022, 10:32 AM
Prasenjit Satpute
Prasenjit Satpute - avatar
+ 4
So what I have found: the best way to learn this is practice practice practice. Debug your own code. Have some prints within your program that show you what is happening, eg within a loop, or printing as you += your total. Send some values, observe the logic do it's thing, adjust if it's not right. My very limited experience when working as a Building Management System (= large building HVAC) coder/programmer: take an existing code/function from your library, modify it to suit the application. We would then implement it with some variables as fixed values, change one thing at a time and observe the system, unlock a variable and prove it "plays nice" from its input, repeat for others. As an improvement: check what happens if a sensor goes faulty or a device fails to respond to an output, eg fan has power but isn't running. Basically it becomes cut+paste from your library, then modify to suit.
20th Mar 2022, 12:44 AM
HungryTradie
HungryTradie - avatar
+ 2
is it passed "water water water water" or {"water", "water", "water", "water"} or "water" //1st loop "water" // 2nd loop "water" // 3rd loop "water" // 4th loop?
19th Mar 2022, 9:59 PM
William Owens
William Owens - avatar
+ 2
I was honestly looking into strcmp haha gimme a sec, and thx btw
19th Mar 2022, 11:01 PM
Karl Marx
Karl Marx - avatar
+ 1
I think you are going at this in a way to difficult manner: Is this a simple cash register, where: "pizza" & "nachos" cost & 6.00 "cheeseburger" cost $10.00 "water" cost $4.00 and "coke" cost $5.00?
19th Mar 2022, 9:43 PM
William Owens
William Owens - avatar
+ 1
Is there a space between the items in the string?
19th Mar 2022, 9:57 PM
William Owens
William Owens - avatar
+ 1
I think no space and possibly 4 different inputs. Because if I do a printf("%s%s%s%s", orders[1-4]) it prints all together
19th Mar 2022, 10:02 PM
Karl Marx
Karl Marx - avatar
+ 1
You and three friends go to a baseball game and you offer to go to the concession stand for everyone. They each order one thing, and you do as well. Nachos and Pizza both cost $6.00. A Cheeseburger meal costs $10. Water is $4.00 and Coke is $5.00. Tax is 7%. Task Determine the total cost of ordering four items from the concession stand. If one of your friend’s orders something that isn't on the menu, you will order a Coke for them instead. Input Format You are given a string of the four items that you've been asked to order that are separated by spaces. Output Format You will output a number of the total cost of the food and drinks. Sample Input 'Pizza Cheeseburger Water Popcorn' Sample Output 26.75
19th Mar 2022, 10:09 PM
Karl Marx
Karl Marx - avatar
+ 1
I figured that if I separated the string into an array of 4 items, and then compared those items one at a time with a series of else if statements in a function returning each ones value to store into another array I could then easily use the last array given any combination of items to easily do the math
19th Mar 2022, 10:12 PM
Karl Marx
Karl Marx - avatar
+ 1
Your printf("%s%s%s%s", orders[1-4]); Is printing them without the space. They are separate words.
19th Mar 2022, 10:15 PM
HungryTradie
HungryTradie - avatar
+ 1
Yes, I suppose that is true. I was only printing them to check if my first array was working :P
19th Mar 2022, 10:16 PM
Karl Marx
Karl Marx - avatar
+ 1
Lots of changes, I've got it working but maybe we can talk you through it first? Your 2dimension array doesn't need to be a pointer. Your value definitely doesn't need to be pointer(pointer) and really can just be a float total. Ok so far? {edit: these changes.} char orders[4][50]; //dont need pointer when it is an array /* unsure what you were trying here. orders[0]; orders[1]; orders[2]; orders[3]; */ /* lets just store it as a number, ok? double **value[4][6]; value[0]; value[1]; value[2]; value[3]; */ double value; //HT
19th Mar 2022, 10:44 PM
HungryTradie
HungryTradie - avatar
+ 1
Those changes make your total loop change to something like this: for (int j = 0; j < 4; j++){ //*value[j] = cost(orders[j]); //HT changed as below value += cost(orders[j]); //printf ("%.2f", *value[j]); //HT changed as below printf ("%.2f ", value); //debugging }
19th Mar 2022, 10:49 PM
HungryTradie
HungryTradie - avatar
+ 1
Ok I removed the pointer from the orders array and it still worked ( printing out water 4 times) Not sure what you mean by float total. I don't understand how you take the order word like "cheeseburger" and get 10.00 without comparing the word to itself and if true, assigning the true value
19th Mar 2022, 10:50 PM
Karl Marx
Karl Marx - avatar
+ 1
Ok I made those changes
19th Mar 2022, 10:57 PM
Karl Marx
Karl Marx - avatar
+ 1
ok think I got it all
19th Mar 2022, 11:10 PM
Karl Marx
Karl Marx - avatar
+ 1
I am still working with what you have me to understand it. My brain is fried now though haha. Thanks again!
20th Mar 2022, 12:46 AM
Karl Marx
Karl Marx - avatar
+ 1
Was out for a bit: I would have went at it differently. If the input is a single line string separated by a space. #include <stdio.h> #include <stdlib.h> #include <string.h> #define LONGESTWORD 13 #define ORDERSIZE 4 #define TAX .07 float getvalue(char* single_item){ if(strcmp(single_item, "water") == 0){ return 4.0; } else if(strcmp(single_item, "nachos") == 0 || strcmp(single_item, "pizza") == 0){ return 6.0; } else if(strcmp(single_item, "cheeseburger") == 0){ return 10.0; } else { return 5.0; } } float subtotal(char* item, float (*getvalue)(char*)){ float subtot = 0; char *item_order; const char delim[] = "\n "; item_order = strtok(item, delim); while(item_order != NULL){ subtot += getvalue(item_order); item_order = strtok(NULL, delim); } return subtot; } int main(void){ float sub = 0.0, tax = 0.0; char* order; order = malloc(sizeof *order * LONGESTWORD * ORDERSIZE); puts("Please order up to 4 items:"); fgets(order, LONGESTWORD * ORDERSIZE, stdin); sub += subtotal(order, getvalue); printf("Your subtotal is $%.2f\n", sub); tax = (sub * TAX); printf("Your tax is $%.2f\n", tax); printf("Your order is $%.2f\n", sub + tax); free(order); } https://code.sololearn.com/cPLs7LjxWZFN
20th Mar 2022, 12:54 AM
William Owens
William Owens - avatar
+ 1
This is my 5th puzzle, and I have gotten the others. This was just my first time using functions. My problem I think was that I couldn't in my head figure out how to compare strings from I put to string literals. Based on the two codes of help.you guys posted, I wasn't too far off haha.
20th Mar 2022, 12:38 PM
Karl Marx
Karl Marx - avatar
+ 1
Thanks everyone for your help. Finally got it to work without the function.
20th Mar 2022, 4:21 PM
Karl Marx
Karl Marx - avatar