User Tools

Site Tools


haas:fall2019:unix:stdin_redirection

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

haas:fall2019:unix:stdin_redirection [2013/12/24 07:32] (current)
Line 1: Line 1:
 +Original code:
 +
 +<code c>
 +#​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);
 +}
 +</​code>​
 +
 +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:​
 +
 +<cli>
 +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
 +</​cli>​
 +
 +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:
 +
 +<code c>
 +#​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);
 +}
 +</​code>​
 +
 +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.
  
haas/fall2019/unix/stdin_redirection.txt · Last modified: 2013/12/24 07:32 (external edit)