Original code: #include int main() { int a, b, c, d; float avg; printf("Please enter the first number: "); scanf("%d", &a); printf("Please enter the second number: "); scanf("%d", &b); printf("Please enter the third number: "); scanf("%d", &c); printf("Please enter the fourth number: "); scanf("%d", &d); avg = (float)(a + b + c + d) / 4; // force operation to be considered float, not native (int) printf("The average is %.2f\n", avg); // format to 2 decimal places with the .2 return(0); } With this code typed in, compiled, and ran, you can manually enter the 4 values and should see their average. Conversely, we can also put our desired input in a file and feed in into our program via I/O redirection: lab46:~/src/unix$ echo 24 > infile lab46:~/src/unix$ echo 37 >> infile lab46:~/src/unix$ echo 16 >> infile lab46:~/src/unix$ echo 29 >> infile lab46:~/src/unix$ cat infile 24 37 16 29 lab46:~/src/unix$ ./avgprog < infile Output may seem a little messy, but that's only because it still expects actual enter keys to be hit. Notice the desired end result IS displayed. Identical code, minus a lie: #include int main() { int a, b, c, d; float avg; fprintf(stdout, "Please enter the first number: "); fscanf(stdin, "%d", &a); fprintf(stdout, "Please enter the second number: "); fscanf(stdin, "%d", &b); fprintf(stdout, "Please enter the third number: "); fscanf(stdin, "%d", &c); fprintf(stdout, "Please enter the fourth number: "); fscanf(stdin, "%d", &d); avg = (float)(a + b + c + d) / 4; // force operation to be considered float, not native (int) fprintf(stdout, "The average is %.2f\n", avg); // format to 2 decimal places with the .2 return(0); } Basically, a regular **printf()** is IDENTICAL to an **fprintf()** to **stdout**. Everything is a file, remember? Same deal with **scanf()**/**fscanf()** from **stdin**. The lowercase **stdin/stdout/stderr** are file pointers available to us in C.