Transcript lec-io

I/O in C + Misc
Lecture 13
7.2.2002.
1
6.2..2001
Sudeshna Sarkar, IIT Kharagpur

Input : movement of data into memory
from the outside world.



Output: movement of data from memory to
outside world.


2
read operation
Changes the value of the variable
write operation
does not change value of memory
6.2..2001
Sudeshna Sarkar, IIT Kharagpur


In C, input and output is handled by a set
of standard library functions.
Conceptually, C performs all I/O on text
streams.


3
The standard input stream from the keyboard
is referred to as stdin.
The standard output stream is referred to as
stdout,
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Single character input : getchar


4
getchar reads a single character from stdin
char ch;
ch = getchar();
The getchar function accepts any
character types in including newline, blank,
and tab.
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Single character output : putchar

5
putchar prints a single character to stdout
char ch;
...
putchar (ch) ;
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Example
/* Read a character from the keyboard and output it in reverse case */
#include <stdio.h>
#include <ctype.h>
main()
{
char alpha;
printf (“\n Enter a alphabet (lowercase or uppercase): “);
alpha = getchar();
if (islower(alpha))
putchar (toupper(alpha));
else
putchar (tolower(alpha));
}
6
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Display formatted output (printf)
printf (“Enter %d positive numbers:”, num1*2);
printf (“control string”, list of expressions) ;
Control string gives the format of output.
 Expressions are what to output
 %d is a placeholder for an int value.
printf (“The %d-th character is %c\n”, i, ch);
% placeholders in format string match expressions
in output list in number, order, type.

7
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Read input : scanf
scanf (“control string”, &input list) ;
scanf(“%d”, &number);
scanf(“%d%lf”,&studentId, &grade);


Input list variables must be preceded by an &
% placeholders in the format must match
variables in the input list.

8
one-for-one in number, order, and type.
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Whitespace


“Whitespace”: space ‘ ‘, tab ‘\t’, newline ‘\n’
Skipped by scanf for int (%d) and double
(%lf)


Not skipped for char input (%c)

9
user can type spaces before a number and
they are ignored.
each character typed, including spaces, is
used
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Review: Mixed Mode Arithmetic
What is 2 * 3.14 ?
The compiler implicitly (automatically) converts int to double
when they occur together.
Generally in mixed expressions, the variable whose type has
lower precision is promoted to the type of the variable with
higher precision.
10
higher precision
int
unsigned int
unsigned long int
long int
float
double
long double
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
double d;
int x=5, y=2;
double dx=5.0, dy=2.0;
d = x/y;
printf(“1. d =%f\n”, d);
d = dx/y;
printf(“2. d =%f\n”, d);
d = x/dy;
printf(“3. d =%f\n”, d);
11
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Assignment : mixed mode
float i, j;
i = 1.99; j = -1.99;
printf (“i = %d, j = %d\n”, i, j);
/* floating point numbers are truncated while converting to int */
Assignment rules:
 If the two operands in an assignment expression are of
different data types, then the value of the righthand operand
will be converted to the type of the operand on the left.
 A float value is truncated if assigned to an int.
 A double identifier is rounded if assigned to a float.
 An int may be altered if assigned to a short int or to a char.
12
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Explicit conversions: case
(type) expression;
double avg = total/count;
double avg = (double)total / (double)count;
((int)(i+f)) % 4 /* i is int, f is float */
13
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Errors

Syntax : the required form of the program


Semantics and logic: what the program
means


14
The C compiler catched these “syntax errors”
what you want it to do
The C compiler cannot catch these kinds of
errors.
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Library functions: stdio.h
int getchar (void)
int printf(...)
int putchar(c)
int rand(void)
int scanf(...)
15
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Library functions: math.h
double acos (double)
double asin (double)
double atan (double)
double ceil (double)
double floor (double)
double cos(double)
double exp(double)
double fabs (double)
double log (double)
double log10 (double)
double pow (double, double)
16
double sin (double)
double sinh (double)
double cosh (double)
double tan (double)
double tanh (double)
double sqrt(double)
6.2..2001
Sudeshna Sarkar, IIT Kharagpur
Library functions: ctype.h
int isalnum (char)
int isalpha (char)
int isascii (char)
int isdigit (char)
int islower (char)
int ispunct (char)
int isspace (char)
int isupper (char)
int toascii (char)
int tolower (char)
int toupper (char)
17
6.2..2001
Sudeshna Sarkar, IIT Kharagpur