PPS 3rd Unit
PPS 3rd Unit
PPS 3rd Unit
Preprocessor:
Preprocessing directives are lines in your program that start with `#'.
The `#' is followed by an identifier that is the directive name.
1 #define
Substitutes a preprocessor macro.
2 #include
Inserts a particular header from another file.
3 #undef
Undefines a preprocessor macro.
4 #ifdef
Returns true if this macro is defined.
5 #ifndef
Returns true if this macro is not defined.
6 #if
Tests if a compile time condition is true.
7 #else
The alternative for #if.
8 #elif
#else and #if in one statement.
9 #endif
Ends preprocessor conditional.
#include <file>: It searches for a file named file in a list of directories specified
by you, then in a standard list of system directories.
#include "file": It searches for a file named file first in the current directory,
then in the same directories used for system header files.
User can create their own header file. Following program explain how to create
Simple Macros
Syntax:
#include<stdio.h>
# define upper 20
int main()
int i,n=5;
i=upper+n;
printf(“value of i is %d\n”,i);
Syntax:
Example:
#include<stdio.h>
{
int a,b,area;
scanf(“%d%d”,&a,&b);
area=rectanglearea(a,b);
Output:
2 5
area of rectangle is 10
Example:
# define rectanglearea(a,b) (a*b) //macro definition
Using conditional compilation, if user want, compiler to skip over part of code
by using preprocessing commands #ifdef and #endif
Syntax:
#ifdef macroname
Statement 1;
Statement 1;
.
.
#endif
If macronme has been #defind, the block of code will be processed as usual;
otherwise not.
Example 1: Example 2:
#include<stdio.h> #include<stdio.h>
# define rectanglearea(a,b) (a*b) # define rectanglearea(a,b) (a*b)
# define upper 2 # define upper 2
int main() int main()
{ {
int a,b,area; int a,b,area;
#ifdef upper #ifdef u
printf("enter a & b value"); printf("enter a & b value");
scanf("%d%d",&a,&b); scanf("%d%d",&a,&b);
area=rectanglearea(a,b); area=rectanglearea(a,b);
printf("area of rectangle is %d",area); printf("area of rectangle is
#endif %d",area);
Printf(“\n end of the program”): #endif
return 0; Printf(“\n end of the program”):
} return 0;
}
Output:
enter a & b value Output:
57 end of the program
area of rectangle is 35
end of the program
Example:
#include<stdio.h>
# define rectanglearea(a,b) (a*b)
# define upper 2
int main()
{
int a,b,area;
#ifndef upper
printf("enter a & b value");
scanf("%d%d",&a,&b);
area=rectanglearea(a,b);
printf("area of rectangle is %d",area);
#endif
return 0;
}
Output:
#include<stdio.h>
int main()
{
int num;
printf("enter number");
scanf("%d",&num);
#if num>0
printf("number is +ve\n");
#elif num<0
printf("number is -ve\n");
#else
printf("number is zero\n");
#endif
return 0;
}
25
number is +ve
File:
In C programming, file is a place on computer disk where information is stored
permanently. Which represents a sequence of bytes ending with an end-of-
file marker(EOF) .
Types of Files
1. Text files
2. Binary files
1. Text files
Text files are the normal .txt files that you can easily create using Notepad or
any simple text editors.
When you open those files, you'll see all the contents within the file as plain
text. You can easily edit or delete the contents.
They take minimum effort to maintain, are easily readable, and provide least
security and takes bigger storage space.
2. Binary files
Instead of storing data in plain text, they store it in the binary form (0's and
1's).
They can hold higher amount of data, are not readable easily and provides a
better security than text files.
File Operations
In C, you can perform four major operations on the file, either text or binary:
When working with files, you need to declare a pointer of type file. This
declaration is needed for communication between the file and program.
Syntax:
FILE *file_pointer_name;
unction description
filename is the name of the file to be opened and mode specifies the purpose
of opening the file. Mode can be of following types,
Example:
description
mode
If fopen( ) cannot open "test.dat " it will a return a NULL pointer which should
always be tested for as follows.
Example:
FILE *fp ;
if ( ( fp = fopen( "test.dat", "r" ) ) == NULL )
{
puts( "Cannot open file") ;
exit( 1) ;
}
This will cause the program to be exited immediately if the file cannot be
opened.
Closing a File:
The file (both text and binary) should be closed after reading/writing.
Syntax:
fclose(file_pointer_name);
Example:
For reading and writing to a text file, we use the functions fprintf() and fscanf().
They are just the file versions of printf() and scanf(). The only difference is that,
fprint and fscanf expects a pointer to the structure FILE.
#include <stdio.h>
int main()
{
int num;
FILE *fptr;
fptr = fopen("program.txt","w");
if(fptr == NULL)
{
printf("Error!");
exit(1);
}
fprintf(fptr,"%d",num);
fclose(fptr);
return 0;
}
This program takes a number from user and stores in the file program.txt.
#include <stdio.h>
int main()
{
int num;
FILE *fptr;
fscanf(fptr,"%d", &num);
return 0;
}
This program reads the integer present in the program.txt file and prints it
onto the screen.
If you succesfully created the file from Example 1, running this program will
get you the integer you entered.
Note: Other functions like fgetchar(), fgetc(),fputc(),fgets(),fputs() etc. can be
used in similar way.
Functions fread() and fwrite() are used for reading from and writing to a file on
the disk respectively in case of binary files.
To write into a binary file, you need to use the function fwrite().
The functions takes four arguments: Address of data to be written in disk, Size
of data to be written in disk, number of such type of data and pointer to the file
where you want to write.
fwrite(address_data,size_data,numbers_data,pointer_to_file);
#include <stdio.h>
struct threeNum
{
int n1, n2, n3;
};
int main()
{
int n;
struct threeNum num;
FILE *fptr;
We declare a structure threeNum with three numbers - n1, n2 and n3, and
define it in the main function as num.
Now, inside the for loop, we store the value into the file using fwrite.
The first parameter takes the address of num and the second parameter takes
the size of the structure threeNum.
Since, we're only inserting one instance of num, the third parameter is 1. And,
the last parameter *fptr points to the file we're storing the data.
fread(address_data,size_data,numbers_data,pointer_to_file);
#include <stdio.h>
struct threeNum
{
int n1, n2, n3;
};
int main()
{
int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
printf("Error! opening file");
return 0;
}
In this program, you read the same file program.bin and loop through the
records one by one.
In simple terms, you read one threeNum record of threeNum size from the file
pointed by *fptr into the structure num.
#include <stdio.h>
void main()
{
FILE *fin, *fout ;
char dest[30], source[30], ch ;
fclose( fin ) ;
fclose( fout ) ;
}
Note : When any stream I/O function such as fgetc() is called the current
position of the file pointer is automatically moved on by the appropriate
amount, 1 character/ byte in the case of fgetc() ;
pFile=fopen("myfile.txt", "r");
pFile2=fopen("myfile2.txt", "a");
if(pFile==NULL) {
perror("Error opening file.");
}
else {
while(fgets(buffer, sizeof(buffer), pFile)) {
fprintf(pFile2, "%s", buffer);
}
}
fclose(pFile);
fclose(pFile2);
program
program
For writing in file, it is easy to write string or int to file using fprintf and putc, but you
might have faced difficulty when writing contents of struct. fwrite and fread make task
easier when you want to write and read blocks of data.
1. fwrite : Following is the declaration of fwrite function
2. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream)
3. ptr - This is pointer to array of elements to be written
4. size - This is the size in bytes of each element to be written
5. nmemb - This is the number of elements, each one with a size of size
bytes
stream - This is the pointer to a FILE object that specifies an
output stream
1. fseek()
2. ftell()
3. rewind()
fseek():
This function is used for seeking the pointer position in the file at the specified
byte.
Syntax: fseek( file_pointer, displacement, pointer position);
OR
int fseek ( FILE *fp, long num_bytes, int origin ) ;
Where
file_pointer ---- It is the pointer which points to the file.
displacement ---- It is positive or negative.
This is the number of bytes which are skipped backward (if negative) or
forward( if positive) from the current position.
This is attached with L because this is a long integer.
Pointer position:
This sets the pointer position in the file.
0 Beginning of file.
1 Current position
2 End of file
Example:
1) fseek( p,10L,0)
0 means pointer position is on beginning of the file, from this statement
pointer position is skipped 10 bytes from the beginning of the file.
2) fseek( p,5L,1)
1 means current position of the pointer position.From this statement
pointer position is skipped 5 bytes forward from the current position.
3)fseek(p,-5L,1)
From this statement pointer position is skipped 5 bytes backward from the
current position.
ftell():
This function returns the value of the current pointer position in the file. The
value is count from the beginning of the file.
Syntax: ftell(fptr);
Where fptr is a file pointer.
rewind():
This function is used to move the file pointer to the beginning of the given file.
Syntax: rewind( fptr);
Where fptr is a file pointer.
Example: Write a program to read last ‘n’ characters of the file using
appropriate file functions(Here we need fseek() and fgetc()).
01 #include<stdio.h>
02 #include<conio.h>
03 void main()
04 {
05 FILE *fp;
06 char ch;
07 clrscr();
08 fp=fopen("file1.c", "r");
09 if(fp==NULL)
11 else
12 {
14 scanf("%d",&n);
15 fseek(fp,-n,2);
16 while((ch=fgetc(fp))!=EOF)
17 {
18 printf("%c\t",ch);
19 }
20 }
21 fclose(fp);
22 getch();
23 }
b. Write a C program to print the records in reverse order. The file must be
opened in binary mode.
3. Write a program to copy contents of one file to another using file names
passed as the command line arguments.
May 2017:
DEC 16:
Objective question:
9.A file is
(a) a region of storage
(b) a variable
(c) a data type
(d) a data type and a region of storage
12. We declare file pointer as:FILE *fptr; FILE is a ……………data type defined
in stdio.h
(a) char
(b) string
(c) pointer
(d) struct
13. To open an existing file named myfile for reading only function is used
where fp is a file pointer
(a) fp=fopen(“myfile”,’w’);
(b) fp=fopen(“myfile”,”w”);
(c) fp=fopen(“myfile”,”r”);
(d) fp=fopen(“myfile”,’r’);
22. which one of the following functions is used to detect the end of file
(a)fseek()
(b) ferror()
(c)feof()
(d)fgetc()
25. ……… function is used to move the position indicator to a desired location
within the file
a) fseek()
(b) ftell()
(c) rewind()
(d) fputc()
26 ………… function can be used to find the end of the file maker
(a) fseek()
(b) ftell()
(c) rewind()
(d) none