[go: up one dir, main page]

0% found this document useful (0 votes)
89 views26 pages

Scanf (Continued) and Data Types in C: ESC101: Fundamentals of Computing Nisheeth

The document discusses how the scanf function works in C by reading formatted input from the user according to specifications provided in a format string, and also covers basic data types like int, float, char, and modifiers like long and short that change the range or memory usage of the types. It provides examples of using scanf and printf to read from and write to the user and explains data types like int, long, float and their ranges.

Uploaded by

Shorya Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views26 pages

Scanf (Continued) and Data Types in C: ESC101: Fundamentals of Computing Nisheeth

The document discusses how the scanf function works in C by reading formatted input from the user according to specifications provided in a format string, and also covers basic data types like int, float, char, and modifiers like long and short that change the range or memory usage of the types. It provides examples of using scanf and printf to read from and write to the user and explains data types like int, long, float and their ranges.

Uploaded by

Shorya Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 26

scanf (continued) and

Data Types in C

ESC101: Fundamentals of Computing


Nisheeth
How does scanf work ?
HOW WE MUST SPEAK TO MR.
HOW WE USUALLY SPEAK TO A HUMAN
COMPILER

scanf(“%d%d”, &a, &b); Please read one integer. Ignore all


whitespace (spaces,tabs,newlines) after
that till I write another integer. Read that
Format string tells second integer too.
Format string me how you will
Store value of the first integer in a and
write things, and value of second integer in b.
then I am told
where to store
what I have read

Remember Mr. C likes to be told beforehand what all we are going to


ask him to do!
Scanf follows this exact same rule while telling Mr. C how to read
How does scanf work ?
Be a bit careful since Mr C is a bit careless in this matter
He treats allMywhitespace
advice to youcharacters
is to the same when integers are being
input take input one at a time in
Hmm … you are going
the beginning  Try out
scanf will never print anything to write the English
acrobatics in free time
word Hello followed by
scanf(“Hello %d”,&a); space followed by an
integer. I will store the
Use printf to print and scanf to read value of that integer in a
Try out what happens with the following
scanf(“%d %d”,&a,&b); scanf(“%dHello%d”,&a,&b);
scanf(“%d,%d”,&a,&b); scanf(“\“%d%d\“”,&a,&b);
scanf(“%d\n%d”,&a,&b); scanf(“%d\t%d”,&a,&b);
Commenting
Very important programming practice
int main(){ int main(){ int main(){
int a; // My first int int a; /* My first int */ int a; // My first int
int b; // The other int int b; /* The other int */ int b; // The other int
// Assign them values /* Assign them values */ /* Assign them values */
a = 5, b = 4; a = 5, b = 4; a = 5, b = 4;
Yes. In fact /* */ is used
a + b; So I can mix a + b; to comment several a + b;
return 0; return 0; return 0;
and match? lines at once – shortcut!
} } }
Just be a bit careful.
Some compilers don’t
understand // comments 4
More on Comments
Use comments to describe why you int main(){
defined each variable and what each step int a; // My first int
of your code is doing
You will thank yourself for doing this when you are int b; // The other int
looking at your own code before the end sem exams /* Assign them values
Your team members in your company/research group
will also thank you so that I can add
them later on */
Multiline comments very handy. No need
to write // on every line a = 5, b = 4;
a + b;
return 0;
}
5
A Useful Tip While Problem-Solving
Comments can be also used to identify where is error
Error! Okay! Okay!
Mr C will tell you (compile) where he thinks the error is
Commenting out lines can also help identify the error

int main(){ int main(){ int main(){


Aha! I forgot
int a, b; int a, b; int a, b, c;
to declare c
c = a + b; // c = a + b; c = a + b;
a = 5; a = 5; a = 5;
b = 4; b = 4; b = 4;
return 0; return 0; return 0;
} } } 6
A Useful Tip While Solving Problems
Print your solutions to
each one of these pieces
to see where going wrong

Try breaking up
I have no idea the problem into
what is going smaller pieces
wrong here!
7
A Useful Tip While Solving Problems

Equals 0
A Useful Tip While Solving Problems

Replace this part by (2*x*x*x)/3


Basic Data Types in C
 Int: %d specifier
 Integers like 156, -3, etc
 float (short form of “floating point number”) and double: %f specifier
 Real numbers like 3.14, 2.0, -1.3, etc
 double is like float but has larger range
 char (short form of “character”): %c specifier
 Single letter (a-z or A-Z), single digit, or single special character
 A char is always enclosed in inverted single commas
 Some examples: ‘a’, ‘A’, ‘2’, ‘$’, ‘=‘
 These basic data types can also be used with a modifier
 Modifiers change the normal behaviour of a data type (e.g., its range of values) and
memory storage space required (more on next slides)
Type Modifiers in C
 signed (used with int, float/double, char)
 signed means the data type can have positive and negative values
 int, float/double, char are signed by default (no need to write ‘signed’)
 unsigned (used with int, char)
 unsigned means the data type can have only take positive values
 short (used with int)
 short means it uses only half of the memory size of a normal int
 long (used with int)
 long means it uses twice the memory size of a normal int
 Can store a larger range of values of that type
11
Various C Data Types without/with Modifiers
int (signed int) unsigned int short int (short) long int (long)
%d %u %d %ld

short unsigned long unsigned Yes, multiple modifiers


also allowed
%u %lu

float double long double


%f %lf %Lf

char unsigned char


%c %u
12
int
• Can store integers between -2,147,483,648 and 2,147,483,647

#include <stdio.h> Range: -2^31 to (2^31)-1


int main(){
%d signed int uses 32 bits
int a;
scanf(“%d”, &a);
a (4 bytes, 8 bits = 1 byte)
on recent compilers)
printf(“My first int %d”, a); Integer arithmetic applies to
return 0; integers +, -, /, *, %, ()
} Have worked with them a lot so far
Printing well-formatted outputs using printf
 When printing an int value, place a number between % and d (say %5d)
which will specify number of columns to use for displaying that value
Output
int x = 2345, y=123; 2345
printf("%d\n",x); //Usual (and left aligned) 2345
123
printf("%6d\n",x); //Display using 6 columns (right aligned)
2345
printf("%6d\n",y);

printf("%2d\n",x); //Less columns than digits, same as %d

Note: So far, we have only seen how to print integers.


We will see how to print other types of variables later today 14
long int (usually written just long)
• Really long – can store integers between
• -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807
Range: -2^63 to (2^63)-1
#include <stdio.h>
int main(){ long int uses 64 bits
on recent compilers
long a; //long int also
scanf(“%ld”, &a);
a Integer arithmetic applies to long int as
well +, -, /, *, %, ()
printf(“My first long int %ld”, a); Try them out on Prutor
return 0; %ld How does long work with int int + long,
int * long?
}
Will see in next class…
float float uses 32 bits (4 bytes).
Why this range for double?
• int, long allow us to store, do math formulae Will
withseeintegers
reason later
• float allows us to store, do math formulae with reals

#include <stdio.h> Very large range ± 3.4e+38


int main(){ Arithmetic operations apply to
float as well +, -, /, *, ()
float a;
scanf(“%f”, &a);
a %f
Try them out on Prutor

printf(“My first real %f”, a); What happened to


I remember. Remainders
remainder %?
return 0; Did you ever do
remainders with real make sense for integers,
} numbers in school? not for real numbers
Too many decimal digits
printf revisit: Printing of float/double being printed. Can I just
print one or two?
Correct! Value of a = 123.46
123.456700 1.234567e+02
Value of a = 1.23e+02
• Both %f and %lf work for float and double
• For long double,
Yes. Use %0.2f
%Lf to print
needed Oh right. The usual
2 decimal places rules of rounding apply
• Can use %e if want answer in exponentialhere notation
too. 1.5644 will
#include <stdio.h> Sure. Just like I did it for #include <stdio.h>
become 1.56 if rounded
integer display. See next to 2 places but 1.5654
int main(){ slide  int main(){will become 1.57
double a = 123.4567; double a = 123.4567;
Be printf(“Value Great. So can you also
of a = %0.2f”,
careful, I am rounding %f”, a); a);
while giving printf(“Value
help
of
me
acontrol
= %0.2e”,
%e”,the
a);format
a);
answer correct to 2 decimal places
return123.4567
0;  123.46 return 0; in which float/double is
1.234567  1.23 displayed on screen?
} } 17
printf revisit: Controlled printing of float/double
 Already saw how to use printf for well-formatted int display
 Can also control how to display a float/double using printf
 Can do it using “%a.bf” specifier where a and b are numbers
 Here a is the total field width (number of columns) in which the float will
be displayed, b is the number of digits printed after decimal

float pi = 3.141592; Output


printf("%f\n",pi); //Usual
3.141592
printf("%6.2f\n", pi); //2 decimal
3.14
printf("%0.4f\n",pi); //4 decimal 3.1416
// Note rounding off!
18
double
• Double can also handle real numbers but very large ones
• Similar relation to float as long has to int

#include <stdio.h> Very large range ± 1.79e+308


int main(){ Arithmetic operations apply to
double as well +, -, /, *, ()
double a;
scanf(“%f”, &a);
a There is something called long
double as well
printf(“My first real %f”, a); Use %Lf to work with long
return 0; %lf works doubles
too!
} Try these out on Prutor
char
• Basically, a char is a symbol
• Internally stored as an integer between -128 and 127 (if signed char) or between 0
and 255 (if unsigned char)

Char constants enclosed in ‘ ’


#include <stdio.h> ‘p’ Integer arithmetic applies to char as
int main(){ %c well +, -, /, *, %, ()
char a = ‘p’; a Case sensitive ‘a’, ‘A’ different
printf(“My first char %c\n”, a);
printf(“ASCII value of %c is %d”,a,a);
Various usages (e.g., in arrays of
characters – strings), will see more
return 0; This Will print the ASCII
later
value (integer) of this
} character
American Standard Code
for Information Interchange

\t

\n

Image courtesy wikipedia.org


ASCII Table with Extended Characters

IMAGE COURTESY: https://theasciicode.com.ar/


Mixing Types in C Expressions
 We can have C expression with variables/constants of several types
 Certain rules exist that decide the type of the final value computed
 Demotion and Promotion are two common rules

• int a = 2/3; // a will be 0 (no demotion/promotion)


• float a = 2/3; // a will be 0.0 (RHS is int with value 0, promoted to float with value 0.0)
• int a = 2/3.0; // a will be 0 (RHS is float with value 0.66, becomes int with value 0)
• float a = 2/3.0; // a will be 0.66 (RHS is float with value 0.66, no demotion/promotion)
• int a = 9/2; // a will be 4 (RHS is int with value 4, no demotion/promotion)
• float a = 9/2; // a will be 4.0 (RHS is int with value 4, becomes float with value 4.0)

 During demotion/promotion, the RHS value doesn’t change, only the


data type of the RHS value changes to the data type of LHS variable 23
Type Casting or Typecasting
Also remember: When
 Converting values of one type to other. assigning values, I always
compute the RHS first
 Example: int to float and float to int (also applies to other types)
 Conversion can be implicit or explicit. Typecasting is the explicit
way Automatic (compiler) By us

 int k =5;
 float x = k; // good implicit conversion, x gets 5.0
 float y = k/10; // poor implicit conversion, y gets 0.0
 float z = ((float) k)/10; // Explicit conversion by typecasting, z gets 0.5
 float z = k/10.0; // this works too (explicit without typecasting), z gets
0.5 24
Typecasting: An Example Program
Also, typecasting But be careful about which
just one variable one you are typecasting
#include <stdio.h> on RHS is enough #include <stdio.h>
Typecasting
int main(){ int main(){ makes it
Several other ways
int total = 100, marks = 50;
also possible, e.g., int total = 100, marks=50;
50.0/100 which
float percentage; Equals 0 proper bracketing. float percentage; equals 0.5
percentage = (marks/total)*100; percentage = (float)marks/total*100;
printf("%.2f",percentage); printf("%.2f",percentage);
return 0; return 0;
0.00 50.00
} }

25
Typecasting is Nice. But Take Care..
#include <stdio.h> Expected #include <stdio.h>
int main(){ conversion int main(){
float x; int y; float x; int y;
x = 5.67; x = 1.0e50; // 10^50
y = (int) x; // typecast (convert) float to int y = (int) x; // typecast (convert) float to int
printf(“%d”,y); printf(“%d”,y);
return 0; 5 return 0; -2147483648
} }

Reverse typecasting error can happen too: No. 1.0e50 is too big to be
Sometimes converting a smaller data type cast as an int (or even Are you
(say int) to larger data type (say float) can long – try yourself) kidding?
also give unexpected results (more on this
later in the semester)
Unexpected!
26

You might also like