Input/output streams. Character Input / Output and Input Validation Input and output devices:...

27
Input/output streams

Transcript of Input/output streams. Character Input / Output and Input Validation Input and output devices:...

Page 1: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Input/output streams

Page 2: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Character Input / Output and Input Validation

Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

I/O functions transport information to and from your program.

Standard functions: printf(), scanf(), getchar(), putchar().

Other I/O functions take advantage of OS and hardware.

Page 3: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

3

Standard streams Standard streams are preconnected input and output

channels between a computer program and its environment (typically a text terminal) when it begins execution. 0. standard input (stdin), 1. standard output (stdout),2. standard error (stderr).

File

stdin

Page 4: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

4

Standard input (stdin) Standard input is data (often text) going into a program. The

program requests data transfers by use of the read operation. Not all programs require input. For example, the ls program performs its operation without

any stream data input. List folders and files. No input passed.

The file descriptor for standard input is 0 (zero)The corresponding <stdio.h> variable is FILE* stdin

Page 5: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

5

Standard output (stdout) Standard output is the stream where a program writes its

output data. The program requests data transfer with the write operation.

Not all programs generate output. For example

the file rename command (mv) is silent on success. the ls program outputs list of files or folders.

Rename file. Take data from one file and write to another

The file descriptor for standard output is 1 (one)The corresponding <stdio.h> variable is FILE* stdout

Page 6: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

6

Standard error (stderr) Standard error is another output stream typically used by

programs to output error messages of diagnostics. It is a stream independent of standard output and can be

redirected separately.

The file descriptor for standard error is 2 (two)The corresponding <stdio.h> variable is FILE* stderr

Page 7: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

7

There many other streams

Page 8: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Single-Character I/O

This process is called echoing the input

You might wonder why you must type a whole line before the input is echoed!

(enter)

(enter)

test.c

Page 9: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Redirection and Files

The previous program uses the input function getchar(). How does a program know where to look for its input? A C program using the standard I/O package looks to the standard input

stdin as its source for input. You can tell a program to seek its input from a file instead of from a keyboard.

There are two ways to get a program to work with files: To use special functions that open files, close files, read files, write in files, and so

forth. To use a program designed to work with a keyboard and screen, but to redirect input

and output along different channels. For example reassign the stdin stream to a file.

The redirection is associated with the operating system, not C.

Page 10: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

10

Redirecting input from file

Let’s make a simple txt file input.txt

Now we can redirect input from this file to our program

You can also redirect output to file

test.c

Page 11: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

The rules governing the use of the two redirection operators (< and >)

1. A redirection operator connects an executable program (including standard operating system commands) with a data file. fish.txt > beets.txt addup.exe < count.exe

2. Input cannot be taken from more than one file, nor can output be directed to more than one file by using these operators. addup.exe < fish.txt < beets.txt count.exe > beets.txt > fish.txt

3. Normally, spaces between the names and operators are optional, except occasionally when some characters with special meaning to the Unix shell or Linux shell or DOS are used. We could, for example, have used echo_eof<words.

Page 12: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

If redirection doesn't work for you, you can try having the program open a file directly.

Use: FILE *fp = fopen(“myfile.txt”, “r”)

Page 13: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Buffers

On some systems, the text you input is echoed immediately:HHeelllloo,, tthheerree.. II wwoouulldd[enter] lliikkee aa #On most systems, nothing happens until you press Enter

The immediate echoing of input characters is an instance of unbuffered (or direct) input.

The delayed echoing, on the other hand, illustrates buffered input, in which the characters you type are collected and stored in an area of temporary storage called a buffer

Page 14: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Why have buffers?1. It is less time-consuming to transmit several characters as a block than to

send them one by one.2. If you mistype, you can use your keyboard correction features to fix your

mistake.

Unbuffered input, on the other hand, is desirable for some interactive programs (games).

Buffering comes in two varieties: fully buffered I/O: the buffer is flushed (the contents are sent to their

destination) when it is full (file input). line-buffered I/O: the buffer is flushed whenever a newline character

shows up (keyboard input).

A special family of functions, supported by the <conio.h> header file, for unbuffered input.

Page 15: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Terminating Input A computer operating system needs some way to tell where each file

begins and ends. One method to detect the end of a file is to place a special character in

the file to mark the end.

A second approach is for the operating system to store information on the size of the file.

C handles this variety of methods by having the getchar() function return a special value EOF when the end of a file is reached. Typically, EOF is defined in the stdio.h file as follows:

#define EOF (-1) // the value -1 does not correspond to any character, so it can be used to signal the end of a file.

Page 16: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Terminating keyboard Input: echo_eof.cWhat if you are reading keyboard input and not a file? Most systems (but not all) have a way to simulate an end-of-file condition from the keyboard.

Note these points:1. You don't have to define EOF because stdio.h takes care of

that.2. You don't have to worry about the actual value of EOF.3. The variable ch is changed from type char to type int

because char variables may be represented by unsigned integers in the range 0 to 255, but EOF may have the numeric value -1.

4. The fact that ch is an integer doesn't faze putchar(). It still prints the character equivalent.

5. To use this program on keyboard input, you need a way to type the EOF character. The system interpret a Ctrl+C anywhere as an end-of-file signal

[Ctrl + C]

Page 17: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Working with Buffered Input

Buffered input is often a convenience to the user, providing an opportunity to edit input before sending it on to a program, but it can be bothersome to the programmer when character input is used.Program: You pick a number, and the computer tries to guess it.

Note that the program makes two guesses every time you enter n.

Page 18: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Working with Buffered Input

One solution is to use a while loop to discard the rest of the input line, including the newline character.

Page 19: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Mixing Numeric and Character InputSuppose your program requires both character input using getchar() and numeric input using scanf(). Each of these functions does its job well, but the two don't mix together well.

The scanf() function leaves newline in the input queue. getchar() doesn't skip over newline characters

Page 20: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Input ValidationYou're writing a program that prompts the user to enter a nonnegative integer. Another kind of error is to enter values that are not valid for the particular task the program is doing.For example, that you had a loop that processes nonnegative numbers. One kind of error the user can make is to enter a negative number. You can use a relational expression to test for that:

Another potential pitfall is that the user might enter the wrong type of value, such as the character q.

Page 21: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Input Validation

You need to dispose of the input that caused the problem in the first place; if scanf() doesn't succeed in reading input, it leaves it in the input queue.

Rememberon success, scanf() returns the number of items of the argument list successfully filled.

Page 22: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Input ValidationThe user enters a lower limit and an upper limit defining a range of values. For example, the search may not work with year values less than 1958 or greater than 2004.

Page 23: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

The program calculates the sum of the squares of all the integers in a specified range. The program limits the upper and lower bounds of the range to 1000 and –1000, respectively.

Page 24: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Program output

Page 25: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Menu BrowsingA menu offers the user a choice of responses. Here's a hypothetical example:

Ideally, the user then enters one of these choices, and the program acts on that choice.

The program should work smoothly when the user a) follows instructions.b) fails to follow instructions.

TasksUsing C's switch user choice can be made to correspond to a particular case label.

A while statement is used to provide repeated access to the menu.

Page 26: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.
Page 27: Input/output streams. Character Input / Output and Input Validation Input and output devices: keyboards, disk drives, mouse, monitors, printers, network.

Creating menus provides another illustration of how mixing character input with numeric input can cause problems. Suppose, for example, the count() function (choice c) were to look like this:

If you then responded by entering 3, scanf() would read the 3 and leave a newline character as the next character in the input queue. The next call to get_choice() would result in get_first() returning this newline character, leading to undesirable behavior.