SlideShare a Scribd company logo
6.087 Lecture 4 – January 14, 2010
Review
Control flow
I/O
Standard I/O
String I/O
File I/O
1
Blocks
• Blocks combine multiple statements into a single unit.
• Can be used when a single statement is expected.
• Creates a local scope (variables declared inside are local
to the block).
• Blocks can be nested.
{
in t x =0;
{
int y=0; / ∗ both x and y v i s i b l e ∗ /
}
/ ∗ only x v i s i b l e ∗ /
}
1
Conditional blocks
if ... else..else if is used for conditional branching of execution
i f ( cond )
{
/ ∗ code executed i f cond i s tru e ∗ /
}
else
{
/ ∗ code executed i f cond i s fa l s e ∗ /
}
2
Conditional blocks
switch..case is used to test multiple conditions (more efficient
than if else ladders).
switch ( opt )
{
case ’A’ :
/ ∗ execute i f opt == ’A ’ ∗ /
break ;
case ’B’ :
case ’C’ :
/ ∗ execute i f opt == ’B ’ | | opt == ’C ’ ∗ /
default :
}
3
Iterative blocks
• while loop tests condition before execution of the block.
• do..while loop tests condition after execution of the block.
• for loop provides initialization, testing and iteration together.
4
6.087 Lecture 4 – January 14, 2010
Review
Control flow
I/O
Standard I/O
String I/O
File I/O
5
goto
• goto allows you to jump unconditionally to arbitrary part of
your code (within the same function).
• the location is identified using a label.
• a label is a named location in the code. It has the same
form as a variable followed by a ’:’
s t a r t :
{
i f ( cond )
goto outside ;
/ ∗ some code ∗ /
goto s t a r t ;
}
outside :
/ ∗ outside block ∗ /
5
Spaghetti code
Dijkstra. Go To Statement Considered Harmful.
Communications of the ACM 11(3),1968
• Excess use of goto creates sphagetti code.
• Using goto makes code harder to read and debug.
• Any code that uses goto can be written without using one.
6
error handling
Language like C++ and Java provide exception mechanism to
recover from errors. In C, goto provides a convenient way to exit
from nested blocks.
cont _flag =1;
for ( . . )
for ( . . ) {
{ for ( i n i t ; c o n t _ f l a g ; i t e r )
for ( . . ) {
{ i f ( error_cond )
i f ( error_cond ) {
goto e r r o r ; c o n t _ f l a g =0;
/ ∗ skips 2 blocks ∗ / break ;
} }
} / ∗ i n n er loop ∗ /
e r r o r : }
i f ( ! c o n t _ f l a g ) break ;
/ ∗ outer loop ∗ /
}
7
6.087 Lecture 4 – January 14, 2010
Review
Control flow
I/O
Standard I/O
String I/O
File I/O
8
Preliminaries
• Input and output facilities are provided by the standard
library <stdio.h> and not by the language itself.
• A text stream consists of a series of lines ending with ’n’.
The standard library takes care of conversion from
’rn’−’n’
• A binary stream consists of a series of raw bytes.
• The streams provided by standard library are buffered.
8
Standard input and output
int putchar(int)
• putchar(c) puts the character c on the standard output.
• it returns the character printed or EOF on error.
int getchar()
• returns the next character from standard input.
• it returns EOF on error.
9
Standard input and output
What does the following code do?
int main ( )
{
char c ;
while ( ( c=getchar ( ) ) ! = EOF)
{
i f ( c>=’A’ && c<=’Z’ )
c=c−’A’+’a’ ;
putchar ( c ) ;
}
return 0;
}
To use a file instead of standard input, use ’<’ operator (*nix).
• Normal invocation: ./a.out
• Input redirection: a.out < file.txt. Treats file.txt as source of
standard input.This is an OS feature, not a language
feature.
10
Standard output:formatted
int printf (char format[],arg1,arg2 ,...)
• printf() can be used for formatted output.
• It takes in a variable number of arguments.
• It returns the number of characters printed.
• The format can contain literal strings as well as format
specifiers (starts with %).
Examples:
p r i n t f ( "hello worldn" ) ;
p r i n t f ( "%dn" ,10); / ∗ format : %d ( intege r ) , argument :10 ∗ /
p r i n t f ( "Prices:%d and %dn" ,10 ,20);
11
printf format specification
The format specification has the following components
%[flags][width ][. precision ][ length]<type>
type:
type meaning example
d,i integer printf ("%d",10); /∗prints 10∗/
x,X integer (hex) printf ("%x",10); /∗print 0xa∗/
u unsigned integer printf ("%u",10); /∗prints 10∗/
c character printf ("%c",’A’); /∗prints A∗/
s string printf ("%s","hello"); /∗prints hello∗/
f float printf ("%f",2.3); /∗ prints 2.3∗/
d double printf ("%d",2.3); /∗ prints 2.3∗/
e,E float(exp) 1e3,1.2E3,1E−3
% literal % printf ("%d %%",10); /∗prints 10%∗/
12
printf format specification (cont.)
%[flags][width ][. precision ][ modifier]<type>
width:
format output
printf ("%d",10) "10"
printf ("%4d",10) bb10 (b:space)
printf ("%s","hello") hello
printf ("%7s","hello") bbhello
13
printf format specification (cont.)
%[flags][width ][. precision ][ modifier]<type>
flag:
format output
printf ("%d,%+d,%+d",10,−10) 10,+10,-10
printf ("%04d",10) 0010
printf ("%7s","hello") bbhello
printf ("%-7s","hello") hellobb
14
printf format specification (cont.)
%[flags][width ][. precision ][ modifier]<type>
precision:
format output
printf ("%.2f,%.0f,1.141,1.141) 1.14,1
printf ("%.2e,%.0e,1.141,100.00) 1.14e+00,1e+02
printf ("%.4s","hello") hell
printf ("%.1s","hello") h
15
printf format specification (cont.)
%[flags][width ][. precision ][ modifier]<type>
modifier:
modifier meaning
h interpreted as short. Use with i,d,o,u,x
l interpreted as long. Use with i,d,o,u,x
L interpreted as double. Use with e,f,g
16
Digression: character arrays
Since we will be reading and writing strings, here is a brief
digression
• strings are represented as an array of characters
• C does not restrict the length of the string. The end of the
string is specified using 0.
For instance, "hello" is represented using the array
{’h’,’e’,’l’,’l’,’0’}.
Declaration examples:
• char str []="hello"; /∗compiler takes care of size∗/
• char str[10]="hello"; /∗make sure the array is large enough∗/
• char str []={ ’h’,’e’,’l’,’l’,0};
Note: use " if you want the string to contain ".
17
Digression: character arrays
Comparing strings: the header file <string.h> provides the
function int strcmp(char s[],char t []) that compares two strings in
dictionary order (lower case letters come after capital case).
• the function returns a value <0 if s comes before t
• the function return a value 0 if s is the same as t
• the function return a value >0 if s comes after t
• strcmp is case sensitive
Examples
• strcmp("A","a") /∗<0∗/
• strcmp("IRONMAN","BATMAN") /∗>0∗/
• strcmp("aA","aA") /∗==0∗/
• strcmp("aA","a") /∗>0∗/
18
Formatted input
int scanf(char∗ format ,...) is the input analog of printf.
• scanf reads characters from standard input, interpreting
them according to format specification
• Similar to printf , scanf also takes variable number of
arguments.
• The format specification is the same as that for printf
• When multiple items are to be read, each item is assumed
to be separated by white space.
• It returns the number of items read or EOF.
• Important: scanf ignores white spaces.
• Important: Arguments have to be address of variables
(pointers).
19
Formatted input
int scanf(char∗ format ,...) is the input analog of printf.
Examples:
printf ("%d",x) scanf("%d",&x)
printf ("%10d",x) scanf("%d",&x)
printf ("%f",f) scanf("%f",&f)
printf ("%s",str) scanf("%s",str) /∗note no & required∗/
printf ("%s",str) scanf("%20s",str) /∗note no & required∗/
printf ("%s %s",fname,lname) scanf("%20s %20s",fname,lname)
20
String input/output
Instead of writing to the standard output, the formatted data can
be written to or read from character arrays.
int sprintf (char string [], char format[],arg1,arg2)
• The format specification is the same as printf.
• The output is written to string (does not check size).
• Returns the number of character written or negative value
on error.
int sscanf(char str [], char format[],arg1,arg2)
• The format specification is the same as scanf;
• The input is read from str variable.
• Returns the number of items read or negative value on
error.
21
File I/O
So far, we have read from the standard input and written to the
standard output. C allows us to read data from text/binary files
using fopen().
FILE∗ fopen(char name[],char mode[])
• mode can be "r" (read only),"w" (write only),"a" (append)
among other options. "b" can be appended for binary files.
• fopen returns a pointer to the file stream if it exists or
NULL otherwise.
• We don’t need to know the details of the FILE data type.
• Important: The standard input and output are also FILE*
datatypes (stdin,stdout).
• Important: stderr corresponds to standard error
output(different from stdout).
22
File I/O(cont.)
int fclose(FILE∗ fp)
• closes the stream (releases OS resources).
• fclose() is automatically called on all open files when
program terminates.
23
File input
int getc(FILE∗ fp)
• reads a single character from the stream.
• returns the character read or EOF on error/end of file.
Note: getchar simply uses the standard input to read a
character. We can implement it as follows:
#define getchar() getc(stdin)
char[] fgets(char line [], int maxlen,FILE∗ fp)
• reads a single line (upto maxlen characters) from the input
stream (including linebreak).
• returns a pointer to the character array that stores the line
(read-only)
• return NULL if end of stream.
24
File output
int putc(int c,FILE∗ fp)
• writes a single character c to the output stream.
• returns the character written or EOF on error.
Note: putchar simply uses the standard output to write a
character. We can implement it as follows:
#define putchar(c) putc(c,stdout)
int fputs(char line [], FILE∗ fp)
• writes a single line to the output stream.
• returns zero on success, EOF otherwise.
int fscanf(FILE∗ fp,char format[],arg1,arg2)
• similar to scanf,sscanf
• reads items from input stream fp.
25
Command line input
• In addition to taking input from standard input and files, you
can also pass input while invoking the program.
• Command line parameters are very common in *nix
environment.
• So far, we have used int main() as to invoke the main
function. However, main function can take arguments that
are populated when the program is invoked.
26
Command line input (cont.)
int main(int argc,char∗ argv[])
• argc: count of arguments.
• argv[]: an array of pointers to each of the arguments
• note: the arguments include the name of the program as
well.
Examples:
• ./cat a.txt b.txt (argc=3,argv[0]="cat" argv[1]="a.txt"
argv[2]="b.txt"
• ./cat (argc=1,argv[0]="cat")
27
MIT OpenCourseWare
http://ocw.mit.edu
6.087 Practical Programming in C
January (IAP) 2010
For information about citing these materials or our Terms of Use,visit: http://ocw.mit.edu/terms.

More Related Content

PDF
Rust LDN 24 7 19 Oxidising the Command Line
DOCX
C cheat sheet for varsity (extreme edition)
PPTX
programming language in c&c++
PPS
C programming session 01
PDF
C for Java programmers (part 1)
PPT
Cbasic
PPTX
Programming in C Basics
Rust LDN 24 7 19 Oxidising the Command Line
C cheat sheet for varsity (extreme edition)
programming language in c&c++
C programming session 01
C for Java programmers (part 1)
Cbasic
Programming in C Basics

Similar to Lecture 04 Programming C for Beginners 001 (20)

PPTX
C programming language tutorial
PPTX
Fundamentals of Programming Constructs.pptx
PPT
CInputOutput.ppt
PPT
C tutorial
PPT
C tutorial
PPT
C tutorial
PPTX
basic C PROGRAMMING for first years .pptx
PPTX
C_Progragramming_language_Tutorial_ppt_f.pptx
PDF
Fundamentals C programming and strong your skills.
PPT
Glimpses of C++0x
PDF
2 data and c
PDF
Introduction to Input/Output Functions in C
PPTX
Go Programming Language (Golang)
PPTX
Error correction-and-type-of-error-in-c
PPT
2. Data, Operators, IO.ppt
PDF
Go Lang Tutorial
PPT
slides3_077.ppt
DOCX
C programming language tutorial
Fundamentals of Programming Constructs.pptx
CInputOutput.ppt
C tutorial
C tutorial
C tutorial
basic C PROGRAMMING for first years .pptx
C_Progragramming_language_Tutorial_ppt_f.pptx
Fundamentals C programming and strong your skills.
Glimpses of C++0x
2 data and c
Introduction to Input/Output Functions in C
Go Programming Language (Golang)
Error correction-and-type-of-error-in-c
2. Data, Operators, IO.ppt
Go Lang Tutorial
slides3_077.ppt
Ad

More from MahmoudElsamanty (7)

PPTX
Lecture 03 Programming C for Beginners 001
PPTX
Lecture 02 Programming C for Beginners 001
PPTX
Lecture 01 Programming C for Beginners 001
PPTX
lecture03_EmbeddedSoftware for Beginners
PPTX
ECE-3567-Lecture-2-Spring-2025 for beginners
PPTX
ECE-3567-Lecture-1-Spring-2025 for beginner
PPTX
C Programming course for beginners and intermideate
Lecture 03 Programming C for Beginners 001
Lecture 02 Programming C for Beginners 001
Lecture 01 Programming C for Beginners 001
lecture03_EmbeddedSoftware for Beginners
ECE-3567-Lecture-2-Spring-2025 for beginners
ECE-3567-Lecture-1-Spring-2025 for beginner
C Programming course for beginners and intermideate
Ad

Recently uploaded (20)

PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PDF
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
PPTX
Lecture Notes Electrical Wiring System Components
PDF
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
PPTX
Construction Project Organization Group 2.pptx
PPTX
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
PDF
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
PDF
Digital Logic Computer Design lecture notes
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PDF
Embodied AI: Ushering in the Next Era of Intelligent Systems
PPT
Project quality management in manufacturing
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PDF
R24 SURVEYING LAB MANUAL for civil enggi
PPTX
Internet of Things (IOT) - A guide to understanding
PPTX
CH1 Production IntroductoryConcepts.pptx
PDF
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
PPTX
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
PPTX
Sustainable Sites - Green Building Construction
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
Lecture Notes Electrical Wiring System Components
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
Construction Project Organization Group 2.pptx
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
Digital Logic Computer Design lecture notes
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
Embodied AI: Ushering in the Next Era of Intelligent Systems
Project quality management in manufacturing
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
R24 SURVEYING LAB MANUAL for civil enggi
Internet of Things (IOT) - A guide to understanding
CH1 Production IntroductoryConcepts.pptx
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
CYBER-CRIMES AND SECURITY A guide to understanding
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
Sustainable Sites - Green Building Construction

Lecture 04 Programming C for Beginners 001

  • 1. 6.087 Lecture 4 – January 14, 2010 Review Control flow I/O Standard I/O String I/O File I/O 1
  • 2. Blocks • Blocks combine multiple statements into a single unit. • Can be used when a single statement is expected. • Creates a local scope (variables declared inside are local to the block). • Blocks can be nested. { in t x =0; { int y=0; / ∗ both x and y v i s i b l e ∗ / } / ∗ only x v i s i b l e ∗ / } 1
  • 3. Conditional blocks if ... else..else if is used for conditional branching of execution i f ( cond ) { / ∗ code executed i f cond i s tru e ∗ / } else { / ∗ code executed i f cond i s fa l s e ∗ / } 2
  • 4. Conditional blocks switch..case is used to test multiple conditions (more efficient than if else ladders). switch ( opt ) { case ’A’ : / ∗ execute i f opt == ’A ’ ∗ / break ; case ’B’ : case ’C’ : / ∗ execute i f opt == ’B ’ | | opt == ’C ’ ∗ / default : } 3
  • 5. Iterative blocks • while loop tests condition before execution of the block. • do..while loop tests condition after execution of the block. • for loop provides initialization, testing and iteration together. 4
  • 6. 6.087 Lecture 4 – January 14, 2010 Review Control flow I/O Standard I/O String I/O File I/O 5
  • 7. goto • goto allows you to jump unconditionally to arbitrary part of your code (within the same function). • the location is identified using a label. • a label is a named location in the code. It has the same form as a variable followed by a ’:’ s t a r t : { i f ( cond ) goto outside ; / ∗ some code ∗ / goto s t a r t ; } outside : / ∗ outside block ∗ / 5
  • 8. Spaghetti code Dijkstra. Go To Statement Considered Harmful. Communications of the ACM 11(3),1968 • Excess use of goto creates sphagetti code. • Using goto makes code harder to read and debug. • Any code that uses goto can be written without using one. 6
  • 9. error handling Language like C++ and Java provide exception mechanism to recover from errors. In C, goto provides a convenient way to exit from nested blocks. cont _flag =1; for ( . . ) for ( . . ) { { for ( i n i t ; c o n t _ f l a g ; i t e r ) for ( . . ) { { i f ( error_cond ) i f ( error_cond ) { goto e r r o r ; c o n t _ f l a g =0; / ∗ skips 2 blocks ∗ / break ; } } } / ∗ i n n er loop ∗ / e r r o r : } i f ( ! c o n t _ f l a g ) break ; / ∗ outer loop ∗ / } 7
  • 10. 6.087 Lecture 4 – January 14, 2010 Review Control flow I/O Standard I/O String I/O File I/O 8
  • 11. Preliminaries • Input and output facilities are provided by the standard library <stdio.h> and not by the language itself. • A text stream consists of a series of lines ending with ’n’. The standard library takes care of conversion from ’rn’−’n’ • A binary stream consists of a series of raw bytes. • The streams provided by standard library are buffered. 8
  • 12. Standard input and output int putchar(int) • putchar(c) puts the character c on the standard output. • it returns the character printed or EOF on error. int getchar() • returns the next character from standard input. • it returns EOF on error. 9
  • 13. Standard input and output What does the following code do? int main ( ) { char c ; while ( ( c=getchar ( ) ) ! = EOF) { i f ( c>=’A’ && c<=’Z’ ) c=c−’A’+’a’ ; putchar ( c ) ; } return 0; } To use a file instead of standard input, use ’<’ operator (*nix). • Normal invocation: ./a.out • Input redirection: a.out < file.txt. Treats file.txt as source of standard input.This is an OS feature, not a language feature. 10
  • 14. Standard output:formatted int printf (char format[],arg1,arg2 ,...) • printf() can be used for formatted output. • It takes in a variable number of arguments. • It returns the number of characters printed. • The format can contain literal strings as well as format specifiers (starts with %). Examples: p r i n t f ( "hello worldn" ) ; p r i n t f ( "%dn" ,10); / ∗ format : %d ( intege r ) , argument :10 ∗ / p r i n t f ( "Prices:%d and %dn" ,10 ,20); 11
  • 15. printf format specification The format specification has the following components %[flags][width ][. precision ][ length]<type> type: type meaning example d,i integer printf ("%d",10); /∗prints 10∗/ x,X integer (hex) printf ("%x",10); /∗print 0xa∗/ u unsigned integer printf ("%u",10); /∗prints 10∗/ c character printf ("%c",’A’); /∗prints A∗/ s string printf ("%s","hello"); /∗prints hello∗/ f float printf ("%f",2.3); /∗ prints 2.3∗/ d double printf ("%d",2.3); /∗ prints 2.3∗/ e,E float(exp) 1e3,1.2E3,1E−3 % literal % printf ("%d %%",10); /∗prints 10%∗/ 12
  • 16. printf format specification (cont.) %[flags][width ][. precision ][ modifier]<type> width: format output printf ("%d",10) "10" printf ("%4d",10) bb10 (b:space) printf ("%s","hello") hello printf ("%7s","hello") bbhello 13
  • 17. printf format specification (cont.) %[flags][width ][. precision ][ modifier]<type> flag: format output printf ("%d,%+d,%+d",10,−10) 10,+10,-10 printf ("%04d",10) 0010 printf ("%7s","hello") bbhello printf ("%-7s","hello") hellobb 14
  • 18. printf format specification (cont.) %[flags][width ][. precision ][ modifier]<type> precision: format output printf ("%.2f,%.0f,1.141,1.141) 1.14,1 printf ("%.2e,%.0e,1.141,100.00) 1.14e+00,1e+02 printf ("%.4s","hello") hell printf ("%.1s","hello") h 15
  • 19. printf format specification (cont.) %[flags][width ][. precision ][ modifier]<type> modifier: modifier meaning h interpreted as short. Use with i,d,o,u,x l interpreted as long. Use with i,d,o,u,x L interpreted as double. Use with e,f,g 16
  • 20. Digression: character arrays Since we will be reading and writing strings, here is a brief digression • strings are represented as an array of characters • C does not restrict the length of the string. The end of the string is specified using 0. For instance, "hello" is represented using the array {’h’,’e’,’l’,’l’,’0’}. Declaration examples: • char str []="hello"; /∗compiler takes care of size∗/ • char str[10]="hello"; /∗make sure the array is large enough∗/ • char str []={ ’h’,’e’,’l’,’l’,0}; Note: use " if you want the string to contain ". 17
  • 21. Digression: character arrays Comparing strings: the header file <string.h> provides the function int strcmp(char s[],char t []) that compares two strings in dictionary order (lower case letters come after capital case). • the function returns a value <0 if s comes before t • the function return a value 0 if s is the same as t • the function return a value >0 if s comes after t • strcmp is case sensitive Examples • strcmp("A","a") /∗<0∗/ • strcmp("IRONMAN","BATMAN") /∗>0∗/ • strcmp("aA","aA") /∗==0∗/ • strcmp("aA","a") /∗>0∗/ 18
  • 22. Formatted input int scanf(char∗ format ,...) is the input analog of printf. • scanf reads characters from standard input, interpreting them according to format specification • Similar to printf , scanf also takes variable number of arguments. • The format specification is the same as that for printf • When multiple items are to be read, each item is assumed to be separated by white space. • It returns the number of items read or EOF. • Important: scanf ignores white spaces. • Important: Arguments have to be address of variables (pointers). 19
  • 23. Formatted input int scanf(char∗ format ,...) is the input analog of printf. Examples: printf ("%d",x) scanf("%d",&x) printf ("%10d",x) scanf("%d",&x) printf ("%f",f) scanf("%f",&f) printf ("%s",str) scanf("%s",str) /∗note no & required∗/ printf ("%s",str) scanf("%20s",str) /∗note no & required∗/ printf ("%s %s",fname,lname) scanf("%20s %20s",fname,lname) 20
  • 24. String input/output Instead of writing to the standard output, the formatted data can be written to or read from character arrays. int sprintf (char string [], char format[],arg1,arg2) • The format specification is the same as printf. • The output is written to string (does not check size). • Returns the number of character written or negative value on error. int sscanf(char str [], char format[],arg1,arg2) • The format specification is the same as scanf; • The input is read from str variable. • Returns the number of items read or negative value on error. 21
  • 25. File I/O So far, we have read from the standard input and written to the standard output. C allows us to read data from text/binary files using fopen(). FILE∗ fopen(char name[],char mode[]) • mode can be "r" (read only),"w" (write only),"a" (append) among other options. "b" can be appended for binary files. • fopen returns a pointer to the file stream if it exists or NULL otherwise. • We don’t need to know the details of the FILE data type. • Important: The standard input and output are also FILE* datatypes (stdin,stdout). • Important: stderr corresponds to standard error output(different from stdout). 22
  • 26. File I/O(cont.) int fclose(FILE∗ fp) • closes the stream (releases OS resources). • fclose() is automatically called on all open files when program terminates. 23
  • 27. File input int getc(FILE∗ fp) • reads a single character from the stream. • returns the character read or EOF on error/end of file. Note: getchar simply uses the standard input to read a character. We can implement it as follows: #define getchar() getc(stdin) char[] fgets(char line [], int maxlen,FILE∗ fp) • reads a single line (upto maxlen characters) from the input stream (including linebreak). • returns a pointer to the character array that stores the line (read-only) • return NULL if end of stream. 24
  • 28. File output int putc(int c,FILE∗ fp) • writes a single character c to the output stream. • returns the character written or EOF on error. Note: putchar simply uses the standard output to write a character. We can implement it as follows: #define putchar(c) putc(c,stdout) int fputs(char line [], FILE∗ fp) • writes a single line to the output stream. • returns zero on success, EOF otherwise. int fscanf(FILE∗ fp,char format[],arg1,arg2) • similar to scanf,sscanf • reads items from input stream fp. 25
  • 29. Command line input • In addition to taking input from standard input and files, you can also pass input while invoking the program. • Command line parameters are very common in *nix environment. • So far, we have used int main() as to invoke the main function. However, main function can take arguments that are populated when the program is invoked. 26
  • 30. Command line input (cont.) int main(int argc,char∗ argv[]) • argc: count of arguments. • argv[]: an array of pointers to each of the arguments • note: the arguments include the name of the program as well. Examples: • ./cat a.txt b.txt (argc=3,argv[0]="cat" argv[1]="a.txt" argv[2]="b.txt" • ./cat (argc=1,argv[0]="cat") 27
  • 31. MIT OpenCourseWare http://ocw.mit.edu 6.087 Practical Programming in C January (IAP) 2010 For information about citing these materials or our Terms of Use,visit: http://ocw.mit.edu/terms.