CodingForums.com

CodingForums.com (http://www.codingforums.com/index.php)
-   Computer Programming (http://www.codingforums.com/forumdisplay.php?f=21)
-   -   Program I wrote in C. Any improvements I can make? (http://www.codingforums.com/showthread.php?t=285750)

jerdev 01-14-2013 09:15 AM

Program I wrote in C. Any improvements I can make?
 
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
Code:

#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 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.


All times are GMT +1. The time now is 01:12 PM.

Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.