When I was in undergraduate school, we did quite a few programs that used stdio as the input, and stdout as the output. We were on a Unix box so piping was a big deal, too. Here are some smaller projects that taught, and at the same time, were easy to implement:* Create a file with random numbers, one per line. Pipe that file through an averager, and a sorter (not the one that comes with the OS).
A grading program. Each line of the file should contain the student's name, followed by 0 or more scores, each separated by a vertical bar (or some other easy-to-read character). Pipe that file through a grading program to give each student's average score, and perhaps a letter grade. Sort students by average score.
Roman numeral to arabic converter.
Palindromes
A program that, given a .h or .c file as a starting point, will go through the file and show the #include hierarchy. Each #include encounter will be a "recursive" call. Determine if a circular dependency exists.
A program that will determine if a pattern matches an input string.
A program that will determine if a number is prime. These are just some off the top of my head.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen