Writing C Programs
Here are some recommendations for optimizing how you write C code for CS 107.
Set up a
You're going to be typing
ssh YOUR_SUNET@myth.stanford.edu many times in your
time at Stanford. You can shorten it to
ssh myth by doing the following on
your own computer WHILE NOT ALREADY
ssh'ED INTO THE MYTH MACHINES.
- Create the directory
~/.sshif it does not already exist.
- Within that directory, create a file called
- Inside that file, put the following text in 3 lines:
Now you can just type
ssh myth in new terminals to connect to the Myth
machines. I've configured this, so you'll see me doing this.
Use two terminals at once
Open two terminals and resize one to take up the left half of your screen, and
the other to take up the right half.
ssh into the Myth machines on both of
them, and open the C file you're working on in one of them. Now you never have
to quit your text editor - you can keep it open indefinitely, and run commands
sanitycheck in the other terminal.
Here's what it looks like in action:
Get used to the save-make-run cycle
Programming is a cycle of tweaking your program and testing it, over and over again, until it works the way you intend. To ensure you're testing the version of your program that includes your tweak, make sure you get into the rhythm of doing the following:
- Make a change to your C source code.
- Save the file (
- Pop over to your other terminal.
- Run your program on the current test case (e.g.
- Use the results to inform your next change to your C source code.
Run the sample solution program to understand how your program should behave
Sometimes it's unclear what your program should do in scenario X. Are you supposed to report an error? Segfault? Ignore it?
While running to Ed to ask is one option, it's always safe to run the sample solution to see what it does. If you match the behavior of the sample solution, you're golden. (If you ask Ed, we'll probably end up referring you to the handout or telling you to run the sample solution anyway.)
As an example, for assign0, you can run the sample solution for the
program like this:
The sample solution will have a filename similar to that. Use
ls to view the
contents of the
samples directory to find the exact name.
sanitycheck all the ****ing time
sanitycheck is a great tool for just that - checking your sanity and seeing if
you pass basic test cases. You should only be running it after you've completed
a significant milestone in your work and want to check if your program continues
to pass previous test cases.
Prefer to run your program manually so you can focus on a particular test case
you're failing instead of getting a dump of everything (including results from
programs you haven't even written yet) from
custom_tests anytime you think of a good test case
sanitycheck is bundled with only very basic test cases, and these will get
more and more bare as the quarter progresses. You'll want to write your own test
cases and add them to
custom_tests (look inside the file and match the syntax
If you notice a bug on a particular input and fix it, add the input you failed
custom_tests to ensure your program continues to pass it as you make
Assuming you're in your assignment root directory, you can run
custom_tests by running
Usually part of the points are awarded for writing test cases, so you only help yourself by doing this :)