Original code:
#include<stdio.h> 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<stdio.h> 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.