puts writes a string to stdout and appends a '\n', it does not format the string it has a fixed prototype
printf writes data to stdout, it doesn't automatically append a '\n' and it can write formated data, that is you can give it a format string and binary data and it will put the binary data into the output in the correct format.
gets and scanf act in a similar manor for input, however they are both unsafe functions. You shouldn't use either of them, instead use fgets.
Comment