This document contains notes from a lecture on data input/output (I/O) in C programming. It discusses:
- Lab assignments for an RFID course being allocated to different days of the week, with no re-allocations after a certain date.
- The printf() function for formatted output, covering format specifiers, minimum field widths, floating point precision, uppercase conversion, and interesting prefixes.
- Input functions like gets() and fgets(), and output functions like puts() and fputs().
- Opening and writing to binary files for more efficient storage of data types like integers compared to text files.
- A creative problem about using a "black box" that multiplies
2. Lab
• Lab starts next week again
• State in your feedback form if you need a shift
from the current allocated day along with
reason. Write your roll number in this case.
• Shift is permitted only if you have to
participate in other IIT M certified activity.
• Current allocation
–
–
–
–
–
RFID 1 - 60 (Mon)
RFID 61-120 (Tue)
RFID 121-180 (Wed)
RFID 181-240 (Thurs)
RFID 241-300 (Fri)
7. Small issues
#include <stdio.h>
main() {
char item[20];
int partno;
float cost;
printf(“%s %d %f”,item,partno,cost);
// printf(“%s%d%f”,item,partno,cost);
}
8. Small issues
#include <stdio.h>
main() {
double x = 5000.0, y = 0.0025;
printf(“%f %f %fn”,x,y,x*y);
printf(“%e %e %en”,x,y,x*y);
}
5000.000000 0.002500 12.500000
5.000000e+03 2.500000e-03 1.250000e+01
9. Small issues
#include <stdio.h>
main() { /*minimum field width specifications */
int i = 12345;
float x = 345.678;
printf(“%3d %8dn”,i,i);
printf(“%3f %13fn”,x,x);
printf(“%3e %16en”,x,x);
}
12345 bbb12345
345.678000 bbb345.678000
3.456780e+02 bbbb3.456780e+02
10. Small issues
#include <stdio.h>
main() { /*minimum field width specifications */
float x = 345.678;
printf(“%3g %13gn”,x,x);
}
345.678 bbbbbb345.678
%g - shortest of the %f and %e representations.
11. Small issues
#include <stdio.h>
main() { /*Floating point precision */
float x = 123.456;
printf(“%7f %7.3f %7.1fn”,x,x,x);
}
Rounding
123.4560000 123.456 bb123.5
12. Small issues
#include <stdio.h>
main() { /*Floating point precision */
float x = 123.456;
printf(“%12e %12.5e %12.3en”,x,x,x);
}
Rounding
1.234560e+02 1.23456e+02 bbb1.235e+02
13. Small issues
#include <stdio.h>
main() { /*Floating point precision */
float x = 123.456;
printf(“%e %.5e %.3en”,x,x,x);
}
Rounding and no leading blank spaces
1.234560e+02 1.23456e+02 1.235e+02
14. Small issues
#include <stdio.h>
main() { /*String precision */
char ln[12];
……
printf(“%10s %15s %15.5s %.5s”,ln,ln,ln,ln);
}
Let ln be hexadecimal; always right justified.
hexadecimal bbbbhexadecimal bbbbbbbbbbhexad hexad
16. Interesting stuffs
#include <stdio.h>
main() { /* Uppercase conversion */
int a = 0x80ec;
float b = 0.3e-12;
printf(“%4x %10.2en”,a,b);
printf(“%4X %10.2En”,a,b);
}
80ec 3.00e-13
80EC 3.00E-13
17. Interesting Prefixes
• - means left justified
• + means + should appear before positive
numbers
• 0 means leading zeros instead of blanks
• ‘ ‘ means blanks space before positive values
• # in front of octal and hex mean print 0 and 0x
in front respectively.
• # in front of e-, f-, g- mean put a decimal
point even if whole number
18. A sample program
#include<stdio.h>
main() {
int j = 123;
printf(“%6dn”,j);
printf(“%-6dn”,j);
printf(“%+6dn”,j);
printf(“%-+6dn”,j);
}
bbb123
123bbb
bb+123
+123
//The same for justifying strings
19. The gets() and puts()
• Reads till end-of-line character
#include<stdio.h>
main() {
char line[80];
gets(line);
puts(line);
}
20. The fprintf()
• Similar to printf() but uses a file pointer
• Similarly
– fgets(fpt,..); fputs(fpt,..);
– ch = getc(fpt); putc(ch,fpt);
• fclose(fpt); versus fcloseall();
21. Binary files
• fopen(“…”,”rt”); open for read as text
and is default, the suffix “t” is not
needed
– Equivalent to fopen(…,”r”);
• fopen(“…”, “rb”); open for read as
binary
– You may use the fwrite() command on this
file
22. Binary files
• Advantage is as follows
– Four digit integers need 2 bytes
– fprintf() etc. stores it in TEXT form - so 4
bytes
– fwrite() stores in binary form - 2 bytes on a
file opened in binary write mode
– 50% space savings - assume it stores one
million numbers.
23. A sample program
#include<stdio.h>
main() {
FILE *fp;
int I;
if ((fp=fopen(“binval.dat”,”wb”)) == NULL)
printf(“n ERRORn”);
else {
for (I = 10001; I <= 11000; I++)
fwrite(&I, sizeof(int), 1, fp);
}
fclose(fp);
}
24. Creative Question
• Given a Black box that takes as input
two lower triangular matrices and
outputs the product of the same, use
the black box to multiple two arbitrary
square matrices.