[go: up one dir, main page]

0% found this document useful (0 votes)
24 views23 pages

CInput Output

Uploaded by

raghu Katagall
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views23 pages

CInput Output

Uploaded by

raghu Katagall
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 23

Programming in C

Input / Output
stdin, stdout, stderr

• When your C program begins to execute,


three input/output devices are opened
automatically.
• stdin
– The “standard input” device, usually your keyboard
• stdout
– The “standard output” device, usually your monitor
• stderr
– The “standard error” device, usually your monitor
• Some C library I/O functions automatically
use these devices
7/28/09
Formatted Console Output

• In C formatted output is created using the


printf( ) function.
• printf( ) outputs text to stdout
• The basic function call to printf( ) is of
the form
printf( format, arg1, arg2, … );
where the format is a string containing
– conversion specifications
– literals to be printed

7/28/09
printf( ) conversions
Conversions specifications begin with % and
end with a conversion character.
Between the % and the conversion character
MAY be, in order
• A minus sign specifying left-justification
• The minimum field width
• A period separating the field width and precision
• The precision that specifies
• Maximum characters for a string
• Number of digits after the decimal for a floating
point
• Minimum number of digits for an integer
• An h for “short” or an l (letter ell) for long
See K&R section 7.2 and appendix section B1.2
7/28/09
Common printf( )
Conversions
• %d -- the int argument is printed as a decimal
number
• %u -- the int argument is printed as an unsigned
number
• %s -- prints characters from the string until ‘\0’ is
seen or the number of characters in the (optional)
precision have been printed (more on this later)
• %f -- the double argument is printed as a floating
point number
• %x, %X -- the int argument is printed as a
hexadecimal number (without the usual leading
“0x”)
• %c - the int argument is printed as a single
character
• %p - the pointer argument is printed (implementation
dependent)
7/28/09
printf( ) Examples
int anInt = 5678;
double aDouble = 4.123;
#define NAME “Bob”

/* what is the output from each printf( ) */


printf (“%d is a large number\n”, anInt);
printf (“%8d is a large number\n”, anInt);
printf (“%-8d is a large number\n”, anInt);
printf (“%10.2f is a double\n”, aDouble);
printf( “The sum of %d and %8.4f is %12.2f\n”,
anInt, aDouble, anInt + aDouble);
printf (“Hello %s\n”, NAME);

7/28/09
Formatted Output Example
• Use field widths to align output in columns
int i;
for (i = 1 ; i < 5; i++)
printf("%2d %10.6f %20.15f\n", i,sqrt(i),sqrt(i));

12 1234567890 12345678901234567890
1 1.000000 1.000000000000000
2 1.414214 1.414213562373095
3 1.732051 1.732050807568877
4 2.000000 2.000000000000000

7/28/09
Keyboard Input
In C, keyboard input is accomplished using the scanf(
) function. scanf reads user input from stdin.

Calling scanf( ) is similar to calling printf( )


scanf( format, arg1, arg2, ... )
The format string has a similar structure to the format
string in printf( ). The arguments are the
addresses of the variables into which the input is
store.

See K & R section 7.4 and Appendix section B1.3 for a


detailed description of scanf( )

7/28/09
scanf( ) format string
The scanf( ) format string usually contains
conversion specifications that tell scanf( )
how to interpret the next “input
“ field”. An
input field is a string of non-whitespace
characters.
The format string usually contains
– Blanks or tabs which are ignored
– Ordinary characters which are expected to match
the next (non-whitespace) character input by the
user
– Conversion specifications usually consisting
• % character indicating the beginning of the conversion
• An optional h, l (ell) or L
• A conversion character which indicates how the input
field is to be interpreted.
7/28/09
Common scanf( )


conversions
%d -- a decimal (integer) number
%u - an unsigned decimal (integer) number
• %x -- a hexadecimal number
– The matching argument is the address of an int
– May be preceded by h to indicate that the argument is the address of
a short or by l (ell) to indicate that the argument is the address of a
long rather than an int
• %f, %e -- a floating point number with optional sign, optional
decimal point, and optional exponent
– The matching argument is the address of a float
– May be preceded by l (ell) to indicate the argument is of the address
of a double rather than a float
• %s -- a word (a string delimited by white space, not an entire line)
– The matching argument is the address of a char or the name of a char
array
– The caller must insure the array is large enough to for the input string
and the terminating \0 character
– More on this later
• %c - a single character
– The matching arguments is the address of a char
– Does not skip over white-space
– More on this later

7/28/09
scanf( ) examples

int age;
double gpa;

printf(“Input your age: “);


scanf( “%d”, &age ); /* note & */
printf(“ input your gpa: “);
scanf (“%lf”, &gpa );

7/28/09
Unix input redirection
• By default, stdin is associated with the user’s
keyboard, but Unix allows us to redirect stdin to
read data from a file when your program is executed.
All scanf( ) statements in your program read from
this file instead of the user’s keyboard with no
change to your code.
• Redirecting input from a file is useful for debugging --
you don’t have to continually retype your input.
• Suppose your program’s name is Project1 and you
wish to get your input from a file named data1. To
redirect stdin to read from data1, use this command
at the Unix prompt
unix> Project1 < data1

7/28/09
Unix output redirection
• By default, stdout is associated with the user’s
console, but Unix allows us to redirect stdout to
output text to a file when your program is
executed. All printf( ) statements in your
program output to this file instead of the user’s
console, otherwise your program is unaffected.
• Suppose your program’s name is Project1 and you
wish to write your output to a file named logfile1.
To redirect stdout to write to logfile1, use this
command at the Unix prompt
unix> Project1 > logfile

• Can you redirect both input and output?


7/28/09
Text File I/O
• Reading and writing from/to a text file is similar to
getting input from stdin (with scanf) and writing to
stdout (with printf).
• Reading data from a text file is accomplished with
the function fscanf( ). This function works the
same as scanf( ), but requires an additional
parameter which is a “handle” to the file.
• Reading a line from a text file is accomplished using
the fgets( ) function. This function is similar to
gets( ) but requires a “handle” to a file and a max
character count.
• Similarly, writing to a text file is accomplished with
the function fprintf() which works the same as
printf( ), but also requires a “handle” to the file to
be read.
7/28/09
Opening and Closing
To read or write from a text file using fscanf(
), fegets( ) or fprintf( ), the file must
first be opened using fopen( ). The file
should be closed using fclose( ) when all
I/O is complete.
fopen( ) returns a handle to the file as the
type FILE* (a pointer to a FILE struct) which
is then used as the argument to fscanf(),
fgets( ), fprintf( ) and fclose( ).
The return value from fopen( ) should be
checked to insure that the file was in fact
opened.
7/28/09
fopen( )
• fopen( ) requires two parameters
– The name of the text file to be opened
– The text file open “mode”
• “r” - open the file for reading only
• “w” - create the file for writing; if the file exists,
discard the its contents
• “a” - append; open or create the file for writing at
the end
• “r+” - open the file for reading and writing
• “w+” - create the file for reading and writing; if the
file exists, discard its contents
• “a+” - open or create the file for reading or writing
at the end
• See K & R appendix B1.1
1/22/10
Using fopen( )

• Open the file named “bob.txt


“ ” for reading
FILE * myFile = fopen( “bob.txt”, “r”);
• If fopen( ) fails, the special value NULL is
returned. All calls to fopen should be
checked
FILE *myFIle = fopen (“bob.txt”, “r”)
If (myFile == NULL)
{
/* handle the error */
}
1/22/10
fscanf.c
#include <stdio.h>
#include <stdlib.h> /* for “exit” */
int main ( )
{
double x ;
FILE *ifp ;

/* try to open the file for reading, check if successful */


/* if it wasn't opened exit gracefully */
ifp = fopen("test_data.dat", "r") ;
if (ifp == NULL) {
printf ("Error opening test_data.dat\n");
exit (-1);
}
fscanf(ifp, "%lf", &x) ; /* read one double from the file
*/
fclose(ifp); /* close the file when finished */

/* check to see what you read */


printf("x = %.2f\n", x) ;
return 0;
}
7/28/09
Detecting end-of-file
with fscanf
• When reading an unknown number of data
elements from a file using fscanf( ), we
need a way to determine when the file has
no more data to read, i.e, we have reached
the “end of file”.
• Fortunately, the return value from
fscanf( ) holds the key. fscanf( ) returns
an integer which is the number of data
elements read from the file. If end-of-file is
detected the integer return value is the
special value EOF
7/28/09
EOF example code
/* code snippet that reads an undetermined number of
integer student ages from a file and prints them out
as an example of detecting EOF
*/
FILE *inFile;
int age;

inFile = fopen( “myfile”, “r” );


if (inFile == NULL) {
printf ("Error opening myFile\n");
exit (-1);
}

while ( fscanf(infile, “%d”, &age ) != EOF )


printf( “%d\n”, age );

fclose( inFile );
7/28/09
fprintf.c
/* fprintf.c */
#include <stdio.h>
#include <stdlib.h> /* exit */
int main ( )
{
double pi = 3.14159 ;
FILE *ofp ;

/* try to open the file for writing, check if successful */


/* if it wasn't exit gracefully */
ofp = fopen("test.out", “w") ;
if (ofp == NULL) {
printf ("Error opening test.out\n");
exit (-1);
}

/* write to the file using printf formats */


fprintf(ofp, “Hello World\n”);
fprintf(ofp, “PI is defined as %6.5lf\n”, pi);

fclose(ofp); /* close the file when finished reading */

return 0;
}
7/28/09
fprintf vs printf
fscanf vs scanf
• Function prototypes are identical except
that fprintf and fscanf require FILE*
parameter
• Format strings identical
• fscanf, fprintf are more general
• printf can be written using fprintf
– fprintf( stdout, ....)
• Similarly, scanf can be written using
fscanf
– fscanf( stdin, .... )
7/28/09
Errors to stderr
• Errors should be output to stderr using fprintf
rather to stdout using printf( )
• Do this
– fprintf( stderr, “this is the error message\n” );
instead of this
– printf( “this is the error message\n” );
• For example
ofp = fopen("test.out", “w") ;
if (ofp == NULL) {
fprintf (stderr, "Error opening test.out\n");
exit (-1);
}

7/28/09

You might also like