其实puts(),gets()属于字符串输入函数。
putchar()与getchar()属于字符输入函数。
1.字符函数
#include<stdio.h>
int main(){
char c;
printf(“请输入一个字符:”);
c=getchar();
putchar(c);
return 0;
}
输出结果如下:记住下面输出的虽然是数字,本质上是字符。

2.字符串函数
#include<stdio.h>
int main(){
char str[20];
printf("请输入一组长度不长于20的字符串:");
gets(str);
puts(str);
return 0;
}

3.因为上面都是单次输入,所以不用考虑回车符滞留在内存所带来的错误,下面带来由于for循环带来的回车符所引起的错误:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 200; i++)
{
printf("请输入一个字符:");
char c = getchar();
putchar(c);
printf("\n");
}
return 0;
}
你会发现虽然输出了正确结果,但是会多输出一个空白的,其实这个的就是回车。你第一次输入的时候输了一个字符‘2’,而且按了一下回车,所以此时你存入内存存了这两个字符,但是getchar();只能接受一个,并且是第一个字符,这样的话,内存中的回车符就滞留了。所以默认不用再输入一个字符给getchar(),因为回车符直接赋值给getchar()了,所以解决方法是在getchar()下面再加一个getchar()来消灭掉多余的回车符导致的错误。
修改后的代码:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 200; i++)
{
printf("请输入一个字符:");
char c = getchar();
getchar();
putchar(c);
printf("\n");
}
return 0;
}

4.因为gets与puts是字符串接收函数,所以没有getchar()那么矫情,所以不会有滞留问题
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 200; i++)
{
char str[20];
printf("请输入长度不长于20的字符串:");
gets(str);
puts(str);
}
return 0;
}

来源:https://www.cnblogs.com/hmy-666/p/12288007.html