View Full Version : Program I wrote in C. Any improvements I can make?

01-14-2013, 09:15 AM
I want to learn how to write code in a way so that if I need to add/edit things in(to) it, I can do it without changing much, if any, code that was already written.
examples could be like, making it so that if there is only 1 coin [be it either a quarter/dime/nickel/penny] it would say "1 penny" not "1 pennies". etc etc

So basically, I want a seamless style of coding.

this is a program i wrote for a pset while learning on cs50.tv

#include <stdio.h>
#include <cs50.h>

// get value of money to get change for
// convert money into cents
// while (change is more than a quarter)
// subtract a quarter
// increment number of coins used by 1
// while (change is more than a dime)
// subtract a dime
// increment number of coins used by 1
// ...
// while (change is 0)
// output number of coins used
// finish program

int main(void)
int q = 0;
int d = 0;
int n = 0;
int p = 0;
printf("This program will calculate the least amount of coins needed to give you your change.\nChange due in dollars (exclude the dollar sign): ");
float f = GetFloat();
float a = f * 100;
printf("$%.2f = %.0f\n", f, a);
while (a >= 25)
a = a - 25;
q = q + 1;
while (a >= 10)
a = a - 10;
d = d + 1;
while (a >= 5)
a = a - 5;
n = n + 1;
while (a >= 1)
a = a - 1;
p = p + 1;
printf("You need %d quarters.\nYou need %d dimes.\nYou need %d nickels.\nYou need %d pennies.\n%d coins total.\n", q, d, n, p, q + d + n + p);

negative zero
01-14-2013, 11:10 PM
I can tell just by reading that my implementation won't compile this. My implementation has no <cs50.h>. In addition, I've never seen a built-in GetFloat().

I have reason to believe that cs50.h is a project file. If this is the case, it doesn't belong between <these brackets> but instead between "these quotation marks".

I have reason to believe that GetInt() is declared and defined in cs50.h. Code shouldn't be defined in .h (header) files, but in .c files. Furthermore, "GetFloat()" seems a horrible Java-esque practise. The reason it's horrible in C is that C has no exceptions. By masking the return value of scanf, you are making error handling extremely difficult. I suggest studying this scanf manual (http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html) carefully before answering the following questions:
1. How would you describe the value that scanf returns on match failure?
2. How would you describe the value that scanf returns when stdin is EOF-marked, or some other error occurs?
3. What would be the only successful return value of a scanf call that is expected to write to 4 items?

Once you've studied that manual carefully, you shouldn't need to mask it behind GetFloat.