Programming in C - PowerPoint PPT Presentation

1 / 25
About This Presentation
Title:

Programming in C

Description:

Programming in C Input / Output – PowerPoint PPT presentation

Number of Views:41
Avg rating:3.0/5.0
Slides: 26
Provided by: Dennis424
Category:

less

Transcript and Presenter's Notes

Title: Programming in C


1
Programming in C
  • Input / Output

2
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

3
Formatted Console Output
  • In Java, formatted output is created using
    System.out.printf( ).
  • In C formatted 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 literals
    to be printed and conversion specifications

4
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 KR section 7.2 and appendix section B1.2

5
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
  • f -- the double argument is printed as a
    floating point number
  • x, X -- the int argument is printed as a
    hexadecimal number
  • c - the int argument is printed as a single
    character
  • p - the pointer argument is printed
    (implementation dependent)

6
printf( ) Examples
  • define NAME Bob
  • int anInt 5678
  • double aDouble 4.123
  • / what is the output from each printf( )
    statement? /
  • printf(Jim said s\n, Hello Bob)
  • printf(Jim said Hello s\n, NAME)
  • printf(Jim said s\n, Hello NAME)
  • printf (8d is a large number\n, anInt)
  • printf (-8d is a large number\n, anInt)
  • printf( The sum of d and 8.4f is 5.2f\n,
  • anInt, aDouble, anInt aDouble)

7
Formatted Output Example
  • Use field widths to align output in columns
  • int i
  • for (i 1 i lt 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

8
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 string, 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. Recall that the name of an array
    is synonymous with the arrays address.
  • See K R section 7.4 and Appendix section B1.3
    for a detailed description of scanf( )

9
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.

10
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
  • s -- a word (a string delimited by white space,
    not a 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
  • 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
  • c - a single character
  • The matching arguments is the address of a char
  • Does not skip over white-space

11
scanf( ) examples
  • int age
  • double gpa
  • char name42
  • printf(Input your age )
  • scanf( d, age ) / note /
  • printf( input your gpa )
  • scanf (lf, gpa )
  • printf(Input your name )
  • scanf( s, name ) / no /

12
gets( ) to read a line
  • The gets( ) function is used to read a line of
    input from stdin until the \n character is
    encountered.
  • Caller must insure that the char array is big
    enough to hold the input string
  • include ltstdio.hgt
  • char myString 101
  • gets( myString )

13
Unix input redirection
  • By default, stdin is associated with the users
    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 users
    keyboard, otherwise your program is unaffected.
  • Redirecting input from a file is useful for
    debugging -- you dont have to continually retype
    your input.
  • Suppose your programs name is Project1 and you
    wish to get your input from a file named data1.
    To redirect stdin to read from data1, use the
    command
  • Project1 lt data1
  • at the Unix prompt

14
Unix output redirection
  • By default, stdout is associated with the users
    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 users
    console, otherwise your program is unaffected.
  • Suppose your programs name is Project1 and you
    wish to write your output to a file named
    logfile1. To redirect stdout to write to
    logfile1, use the command
  • Project1 gt logfile
  • at the Unix prompt
  • Can you redirect both input and output?

15
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.
  • In fact, printf( ) and scanf( ) are just
    specialized versions of fprintf( ) and fscanf( )
    respectively.

16
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.

17
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

18
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 /

19
fscanf.c
  • include ltstdio.hgt
  • include ltstdlib.hgt / 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)

20
fgets( )
  • include ltstdio.hgt
  • include ltstdlib.hgt / exit /
  • int main ( )
  • double x
  • FILE ifp
  • char myLine42 1 / 1 for terminating \0
    /
  • ifp fopen("test_data.dat", "r")
  • fgets(myLine, 42, ifp ) / read up to 42
    chars/
  • fclose(ifp) / close the file when finished
    /
  • / check to see what you read /
  • printf(myLine s\n, myLine)
  • return 0

21
Detecting end-of-filewith 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

22
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
  • inFile fopen( myfile, r )
  • / check that the file was opened /
  • int age
  • while ( fscanf(infile, d, age ) ! EOF )
  • printf( d\n, age )
  • fclose( inFile )

23
Detecting EOF with fgets( )
  • fgets( ) returns the memory address in which the
    line was stored (the char array provided).
    However, when fgets( ) encounters EOF, the
    special value NULL is returned.
  • FILE inFile
  • inFile fopen( myfile, r )
  • / check that the file was opened /
  • char string120 1
  • while ( fgets(string, 120, inFile ) ! NULL )
  • printf( s\n, string )
  • fclose( inFile )

24
fprintf.c
  • / fprintf.c /
  • include ltstdio.hgt
  • include ltstdlib.hgt / 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)

25
fprintf vs printffscanf 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, .... )
Write a Comment
User Comments (0)
About PowerShow.com