1、输出函数
putchar:打印一个字符
puts:打印一个字符串
printf::格式控制打印输出(万能) 返回成功打印的个数
2、输入函数
getchar:输入一个字符
gets:输入一个字符串
scanf:格式打印输入 返回输入成功的个数
经常使用来实现终端无限输入数据,只需要加判断:以scanf为例
while(~scanf()) {
}
while的条件还可以替换 scanf() != -1 或
scanf() != EOF
其他一样
区别:
puts():输出字符串并自动换行
,该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。
gets():直接输入字符串,并且只能输入字符串。
scanf():通过格式控制符%s输入字符串。除了字符串,scanf() 还能输入其他类型的数据。
scanf() 和 gets() 是有区别的:
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
gets() 认为空格也是字符串的一部分,只有遇到回车键
时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串
。
常会出现的BUG
1:scanf("",&),其中的&要注意
寻常变量:必须加&,表示地址,相当于传出参数
数组与指针变量:只需要加变量名,变量名即代表其地址
2:连续使用gets,或者使用了scanf后再使用gets
例如
int N;
int str[20];
scanf("%d",&N);
gets(str);
结果:输入字符串显示不出来
原因:scanf(""),以回车输入结束的标志,但不接受回车,回车放入输入缓冲区
;
紧接着gets()读入,不同的是gets接受了回车,而gets也是以回车结束
,所以gets在没用读入任何字符的情况下结束了,这就是BUG的所在
解决方法:scanf后用getchar() 来吃掉回车