The problem is that it is reading the newline with the second call to scanf(). Rememeber when you hit enter the '\n' character is put into the input stream. So say for the first scanf() you enter 'a' then press enter('\n') the '\n' is still in the input stream. So now the second scanf() immediately picks this up and does not give you a chance to enter your second character. A quick fix is to do something like....
Notice the extra spacing in the second scanf(), this will make it so it skips whitespace, and the newline character '\n' is considered just that.
printf("Enter a letter:");
printf("Enter another letter:");
scanf(" %c", &second);
printf("%c %c", first,second);
About putchar(), getchar() and all that those are just other ways to work with input and output, and imo they are easier to work with than scanf().
putchar() takes an integer as it's arguement and prints it to stdout, which is the terminal usually. Remember that integers and characters are basically interchangeable. A character in C is considered to be a "small integer" because internally it is represented by a number. So you could do something like
Both are valid and work, just think of them as being basically interchangeable.
/* print the letter k */
char letter = 'k';
/* print a newline, 10 is the decimal value for the newline character */
getchar() reads the next character from stdin and returns it. So you could do something like..
Edit- woops just noticed, you were using void main() in your program hehe. Not good!
/* Get a character and print it */
c = getchar();
Use int main(void) instead.