这里主要是记录一些我学习C语言中的一些知识点或个人思考过程
目录
1.fgets()-fputs()
1.1 fgets():
fgets()比ges()安全,有三个输入量,第一个是数组地址,第二个是长度单位(实际收到的字符数量是长度减一), 第三个是选择输入方式,一般是标准输入:stdin
// 1
//输入:12345换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//分析:实际第一次循环知写入了words={‘1’,‘2’,‘3’,‘4’,‘\0’}、剩余的字符存在了缓冲区
//第二次循环把缓冲区的内容写入了words={‘5’,‘\n’,‘\0’,‘\0’,‘\0’},即fgets()是保存换行符的,
//这也是为什么fputs()输出不带换行功能,但是其输出了换行
// 2
//输入:1234换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//第一次循环:words={‘1’,‘2’,‘3’,‘4’,‘\0’},即换行符的优先级是低于最后一个字符串结尾标志符的
// 3
//输入:123换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//第一次循环:words={‘1’,‘2’,‘3’,‘\n’,‘\0’},即换行符的优先级是低于最后一个字符串结尾标志符的
注意点就是fgets()对换行符‘\n’也存储,但是存储字符的数量等于length-1
1.2 fputs()
fputs(),有三个输入量,第一个是数组地址,第二个是选择输出方式,一般是标准输出:stdout 输出没有自带换行功能,常与fgets搭配使用
2.fgets()-fputs()
2.1 gets():
gets(),有1个输入量,字符串存储地址,有返回值,对换行输入进行丢弃
// 1
//输入:123换行结束
int main()
{
char words[5];
while ((gets(words) != NULL) && words[0] != '\n')
{
puts(words);
}
getchar();
return 0;
}
结果如下图:
gets()缺点就是其输出长度可能超出其字符串边界,但是其超出部分不会报错而是会存在缓存区,自动作为下一次的输入,所以要考虑清楚
2.2 puts()
fputs(),有1个输入量,第一个是数组地址,输出自带换行功能,常与gets搭配使用
3.getchar()-putchar():
3.1 getchar():
**这个就很好理解了,其一次只从缓存区取一个字符,多余的留在了缓冲区,作为下次的输入**
注意点:
1.getchar是从缓冲区中取数据,所以在getchar之前如果有其他输入函数 如scanf会将一些字符留在缓冲区中 所以为了保险起见 可以在调用getchar之前清空缓冲区
2. getchar会忽略回车符 当用户在键盘上输入一个字符时,通常会按下回车键,这会将字符和回车符一起发送到输入缓冲区。 如果不希望回车符被读取为字符之一 可以在读取字符后额外使用getchar去消耗回车符
3.2 putchar():
输出一个字符,如果放在循环里,它会把缓存区的内容全部取出
4.缓冲区基础及清理缓存区的常用方法
缓存区基础:可以参考下列文章:缓存区基础及分类
这里提一个:这种方法可以称为万能清空缓存区御语句。
while((ch = getchar()) != ‘\n’ && ch != EOF)