Reputation:
I am currently in chapter 1.5.1 File copying and made a program like so:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
If I ran it like this:
PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray
The output is what I input.
And here's a program I made for experimental purposes:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
printf("%c",c);
c = getchar();
}
}
It produces the same result but is there a difference between putchar
and printf
?
Which is better to use between the 2?
Upvotes: 19
Views: 36078
Reputation: 121
I compiled an example using printf("a")
with -S
and got call putchar
in the assembly code.
Looks like when you have only one char in the printf
the compiler turns it into a putchar()
.
I did another example using printf("ab")
and got call printf
, with the text section in the %edi register.
Upvotes: 12
Reputation: 605
The difference is that putchar
prints one character whereas printf
can print a lot more.
printf("%s\n", "this is a lot longer than one character");
Generally when you print something to the terminal you want to end it with a newline character, '\n'
. At the very least for that reason I would suggest using printf
as then you can write
printf("%c\n", c);
instead of
putchar(c);
putchar('\n');
Upvotes: 2
Reputation: 10727
printf
is a generic printing function that works with 100 different format specifiers and prints the proper result string. putchar
, well, puts a character to the screen. That also means that it's probably much faster.
Back to the question: use putchar
to print a single character. Again, it's probably much faster.
Upvotes: 37
Reputation:
Upvotes: 1
Reputation: 3641
printf lets you format strings in a complicated way, substituting things like integers and floats and other strings.
getchar and putchar get and put characters
I can say that printf is more useful in more ways compared to putchar.
Better look in their respective manual pages ( man 3 printf man 3 putchar ) in terminal
Upvotes: 0