User Tools

Site Tools


haas:fall2019:c4eng:projects:sof0info

sof0 Tips and Tricks

Declaring a variable

To declare a variable, we need a type and a name.

For example, if we are storing test scores ranging from 0 to 100 (ie no negatives), the best fitting data type would be char, specifically, an unsigned char (that would be the type).

    unsigned char scores  = 0;

As I've mentioned, it is a very good documentation practice to also initialize any declared variables to a sane, known starting value. 0 is an excellent choice for most cases.

Receiving input into a variable

To obtain input from the user (via keyboard), we use the fscanf() function, which like fprintf(), utilizes format specifiers.

The format specifier for an unsigned char is %hhu

    fscanf (stdin, "%hhu", &scores);

NOTE: the variable we are reading into needs to be provided, or passed, by its address. We can do that with most variables by prefixing the & symbol.

Verifying input was successful

How do we know if input worked? We could, in our debugging, print it back out using fprintf():

    fprintf (stdout, "scores: %hhu\n", scores);

What does the '\n' do?

The '\n' character is a special character (an escape character) which signifies the newline character (think: enter being pressed).

How do I do math on variables?

Largely the same way you do it in math class, only with a few noted constraints:

  • result is on the left: variable = equation;
  • use the correct math operator symbols defined in C:
    • '+' addition
    • '-' subtraction
    • '*' multiplication
    • '/' integer division (yielding the quotient)
    • '%' integer division (yielding the remainder)
    • parenthesis are available, and should be utilized for purposes of clarity and preserving desired results if your equation would otherwise violate the basic order of operations.

To add 4 to whatever is in our scores variable:

    scores = scores + 4;

How about some more math examples?

Okay, how about taking an average (of four numbers)?

    unsigned char num1  = 0;
    unsigned char num2  = 0;
    unsigned char num3  = 0;
    unsigned char num4  = 0;
    float average       = 0.0;
 
    // prompt for and accept input
    fprintf (stdout, "Enter the first number: ");
    fscanf (stdin, "%hhu", &num1);
 
    fprintf (stdout, "Enter the second number: ");
    fscanf (stdin, "%hhu", &num2);
 
    fprintf (stdout, "Enter the third number: ");
    fscanf (stdin, "%hhu", &num3);
 
    fprintf (stdout, "Enter the fourth number: ");
    fscanf (stdin, "%hhu", &num4);
 
    // display the input values
    fprintf (stdout, "The average of %hhu, %hhu, %hhu, and %hhu is: ", num1, num2, num3, num4);
 
    // calculate the average
    average = (num1 + num2 + num3 + num4) / 4;
 
    // display the average
    fprintf (stdout, "%.2f\n", average);

What about formatting in the printf?

With most types, placing a number between the % and the value will allocate a fixed amount of space on the screen with which to place the output in (if the number takes up less space than the allocated screen space, if it exceeds, it'll overflow it).

A positive value is right-justified.

A negative value is left-justified.

    int value  = 17;
 
    fprintf (stdout, "eight spaces:    >12345678<\n");
    fprintf (stdout, "right justified: >%8d<\n", value);
    fprintf (stdout, "left-justified:  >%-8d<\n", value);
haas/fall2019/c4eng/projects/sof0info.txt · Last modified: 2019/09/06 15:04 by wedge