其实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