Drink price calculator
&quot;Utility&quot; libraries
It's time to take the training wheels off, so to speak. You need to stop using cs50.h and replace it with standard calls to the C libraries. The implementation for get_string has a careful, dynamically-allocated buffer algorithm that is really not necessary for most purposes and can be replaced with simpler calls that use a fixed-size buffer. Advantages of a fixed-size buffer, other than extremely reduced complexity, include that it can enforce &quot;domain-specific limits&quot; (i.e. your product name cannot exceed 128 characters, or whatever) where get_string cannot. get_string is especially overkill for your yes/no prompt.
For an overrun-safe, simple method that is a fixed-buffer replacement for get_string, consider fgets.
Spelling
untill -&gt; until
Memory leaks
You call get_string in a loop, which allocates a new buffer every time; and you never free it. So this will happily eat all of your RAM if you let it.
Comparisons
! (strcmp(newBottles, &quot;y&quot;) == 0)

should just be
strcmp(newBottles, &quot;y&quot;) != 0

New structure initialization
It's somewhat unusual to be returning a structure instance from get_newBottle, though it isn't the end of the world. More typical is to see either

initialization of an existing structure passed by pointer, or
allocation and initialization of a new structure via malloc then returning a pointer.

This impacts performance more for huge structures, but it's still a good idea to learn.