Home »
C programming language
Formatted Input & Output using printf() and scanf()
printf()
This function is used to print text as well as value of the variables on the standard output device (monitor), printf is very basic library function in c language that is declared in stdio.h header file.
Syntax:
printf(“message”);
printf(“message + format-specifier”,variable-list);
First printf() style printf the simple text on the monitor, while second printf() prints the message with values of the variable list.
#include <stdio.h>
int main()
{
printf("Message-1");
printf("Message-2");
printf("Message-3");
return 0;
}
Output
Message-1Message-2Message-3
How to print value of the variables?
To print values of the variables, you need to understand about format specifiers are the special characters followed by % sign, which are used to print values of the variable s from variable list.
Format specifiers
Here are the list some of the format specifiers, use them in printf() & scanf() to format & print values of the variables:
Character (char) %c
Integer (int) %d
Insigned integer (unsigned int) %ld
Long (long) %ld
Unsigned long (unsigned long) %lu
Float (float) %f
Double (double) %lf
Octal Value (octal value) %o
Hexadecimal Value (hex value) %x
String (char[]) %s
**NOTE** Use ‘u' for unsigned type modifier, ‘l' for long.
Escape Sequences
To print special extra line/spaces etc, we use escape sequences, these characters are followed by ‘\' (slash).
\\ \
\” “
\' ‘
\? ?
\a Alert
\b Back space
\n New Line
\t Horizontal tab
\v Vertical tab
\r Carriage return
Consider the following examples:
#include <stdio.h>
int main()
{
int num=100;
float val=1.23f;
char sex='M';
//print values using different printf
printf("Output1:");
printf("%d",num);
printf("%f",val);
printf("%c",sex);
//print values using single printf
printf("\nOutput2:"); // \n: for new line in c
printf("%d,%f,%c",num,val,sex);
return 0;
}
Output
Output1:1001.230000M
Output2:100,1.230000,M
Padding integers with 0's / Spaces
Another important and useful concept is padding values with 0's or Spaces.
Padding with Space: Use %[n]d, here [n] is the number of characters, use %-[n]d for right space padding.
#include <stdio.h>
int main()
{
int a=10;
int b=1234;
int c=11111;
printf("\nLeft padded with spaces:");
printf("\na=%5d \nb=%5d \nc=%5d",a,b,c);
printf("\nRight padded with spaces:");
printf("\na=%-5d,b=%-5d,c=%-5d",a,b,c);
return 0;
}
Output
Left padded with spaces:
a= 10
b= 1234
c=11111
Right padded with spaces:
a=10 ,b=1234 ,c=11111
Padding with Zeros
Use %0[n]d, here [n] is the number of characters.
#include <stdio.h>
int main()
{
int a=10;
int b=1234;
int c=11111;
printf("\nLeft padded with 0's:");
printf("\na=%05d \nb=%05d \nc=%05d",a,b,c);
return 0;
}
Output
Left padded with 0's:
a=00010
b=01234
c=11111
Padding float values with 0's
Consider the following examples:
#include <stdio.h>
int main()
{
float a=1.23f;
float b=1.234f;
float c=1.0f;
printf("\na=%05f \nb=%08.3f \nc=%.2f",a,b,c);
return 0;
}
Output
a=1.230000
b=0001.234
c=1.00
%05f – Since default float value prints 6 digits after precision & here is %05f, so no changes will be made.
%08.3f – “.3f” prints 3 digits after precision and “08” means padding with Zero (8 digits – including digits before and after the precision).
%.2f – 2 Digits will print after precision.
String formatting & padding with spaces
#include <stdio.h>
int main()
{
char text1[]="includehelp";
char text2[]="includehelp.com";
char text3[]="http://www.includehelp.com";
printf("\nWithout padding:");
printf("\ntext1:%s \ntext2:%s \ntext3:%s \n",text1,text2,text3);
printf("\nWith left space padding:");
printf("\ntext1:%30s \ntext2:%30s \ntext3:%30s \n",text1,text2,text3);
printf("\nWith right space padding:");
printf("\ntext1:%-30s \ntext2:%-30s \ntext3:%-30s \n",text1,text2,text3);
return 0;
}
Output
Without padding:
text1:includehelp
text2:includehelp.com
text3:http://www.includehelp.com
With left space padding:
text1: includehelp
text2: includehelp.com
text3: http://www.includehelp.com
With right space padding:
text1:includehelp
text2:includehelp.com
text3:http://www.includehelp.com
Print value in Decimal, Octal & Hexadecimal format
You can print integer value in following formats using following format specifiers:
%d - Decimal
%o - Octal (small ‘o')
%x - Hexadecimal (alphabets will print in small case)
%X - Hexadecimal (alphabets will print in upper case)
Consider the following example
#include <stdio.h>
int main()
{
int val=32106;
printf("\nDecimal : %d",val);
printf("\nOctal : %o",val);
printf("\nHex : %x",val);
printf("\nHex : %X",val);
return 0;
}
Output
Decimal : 32106
Octal : 76552
Hex : 7d6a
Hex : 7D6A
scanf()
This function is used to get (input) value from the keyboard. We pass format specifiers, in which format we want to take input.
Syntax:
scanf(“format-specifier”, &var-name);
scanf(“fromat-specifier-list”, &var-name-list);
First type of scanf() takes the single value for the variable and second type of scanf() will take the multiple values for the variable list.
Consider the following examples:
#include <stdio.h>
int main()
{
int a;
float b;
char c;
printf("Enter an integer number (value of a)?:");
scanf("%d",&a);
printf("Enter a float number (value of b)?:");
scanf("%f",&b);
printf("Enter a character (value of c)?:");
fflush(stdin); // to flush (clear) input buffer
scanf("%c",&c);
printf("\na=%d,b=%f,c=%c",a,b,c);
return 0;
}
Output
Enter an integer number (value of a)?:1234
Enter a float number (value of b)?:1.2345
Enter a character (value of c)?:G
a=1234,b=1.234500,c=G
Consider the following examples to read multiple value in single scanf statement:
#include <stdio.h>
int main()
{
int a;
float b;
char c;
printf("\nEnter value of a,b,c (an integer, a float, a character):");
scanf("%d%f%c",&a,&b,&c);
printf("\na=%d,b=%f,c=%c",a,b,c);
return 0;
}
Output
Enter value of a,b,c (an integer, a float, a character):1234 1.2345 G
a=1234,b=1.234500,c=
Here, G will not store into c variable, because we are not flushing input buffer here. So either you will have to take input of c first or you will have to read value of c separately.