输入缓冲区、输出缓冲区、字符串常用操作及其函数

目录

输出缓冲区

输入缓冲区

字符串相关的常用操作


输出缓冲区

        程序并不会立即把输出的数据显示到屏幕上,而是先存储再输出缓冲区中,当满足一定条件时才显示出来

                1、遇到\n

                2、程序结束

                3、遇到输入语句

                4、当缓冲区满4k时

                5、fflush(stdout)   手动刷新

        缓冲区机制可以提高数据的读写速度,并且可以让低速的输入输出设备与高速的CPU之间协调工作

输入缓冲区

        程序并不会立即获取屏幕上输入的数据,而是按下回车键后程序才从输入缓冲缓冲区读取数据

        1、当需要读取的是整型或者浮点型时,而输入缓冲区中的数据是字符或符号时,此时读取会失败,数据会残留在输入缓冲区中,就会影响下一次或接下来的所有数据的读取

        解决1:

                借助scanf返回值(成功接受字符的个数)判断是否接收成功,如果接受过程有失败情况,可以先清理输入缓冲区,再重新循环接收数据,直到完全接受成功为止

        2、fgets可以指定读取siez-1个字符,如果有多余的会残留在输入缓冲区中,影响下一次输入

        解决2:

                方法一:必须确认输入缓冲区中有垃圾数据时,才能去读取丢弃输入缓冲区的垃圾数据,否则程序会停下来等待缓冲区中有个'\n'

                scanf("%*[^\n]");从缓冲区中接受任意字符并丢弃,只要不是'\n'就一直进行,直到'\n'才停下

                scanf("%*c");

                        丢弃任意字符,把'\n'丢掉

                方法二:

                        借助缓冲区的位置指针移动到缓冲区末尾,实现清理缓冲区的效果

                        只能在Linux系统下使用

                        stdin->_IO_read_ptr = stdin->_IO_read_end;

        3、当先输入整型、浮点型数据,再紧接着输入字符、字符串时u,前一次残留的'\n'或空格,会影响字符、字符串的输入

        解决3:%c前加空格

                scanf(" %c", &ch);   

        

字符串相关的常用操作

        #include <string.h>

        size_t strlen(const char *s);

        功能:计算字符串长度,不包括'\0'

        注意:sizeof 和 strlen 的区别

        char *strcpy(char *dest, const char *src);

        功能:把src拷贝到dest,相当于给dest赋值 =

        返回值:返回dest链式调用

        char *strcat(char *dest, const char *src);

        功能:把src字符串追加到dest后面,相当于 +=

        返回值:返回dest链式调用

        int strcmp(const char *s1, const char *s2);

        功能:比较两个字符串的大小,按照字典序比较(abcd谁在前面谁小),只要比较出结果立即返回,后面不再比较

        返回值:

                s1 > s2         正数

                s1 < s2         负数

                s1 == s2        0

        char *strncpy(char *dest, const char *src, size_t n);

        功能:把src前n个字符拷贝到dest

        char *strncat(char *dest, const char *src, size_t n);

        功能:把src前n个字符追加到dest后面

        int strncmp(const char *s1, const char *s2, size_t n);

        功能:比较两个字符串前n个字符的大小

        练习:自己重写实现strlen/strcpy/strcat/strcmp四个函数


 

        #include <stdlib.h>

        int atoi(const char *nptr);

        功能:把字符串转成int类型

        long atol(const char *nptr);

        功能:把字符串转成long类型

        long long atoll(const char *nptr);

        功能:把字符串转成long long类型

        double atof(const char *nptr);

        功能:把字符串转成double类型

        #include <string.h>

        char *strstr(const char *haystack, const char *needle);

        功能:查找haystack,是否存在needle

        返回值:needle首次在haystack中出现的位置,如果找不到返回NULL

        char *strchr(const char *s, int c)

        功能:查找s中是否有字符c

        返回值:c在s中首次出现的位置,不存在返回NULL

        #include <stdio.h>

        int sprintf(char *str, const char *format, ...);

        字符串拼接

        功能:把各种类型数据输出到str中

        返回值:str的长度

        int sscanf(const char *str, const char *format, ...);

        功能:从str中读取解析各种类型的数据

        返回值:成功读取到的变量的个数

        #include <string.h>

        void *memcpy(void *dest, const void *src, size_t n);

        功能:从src位置拷贝n个字节到dest中

        int memcmp(const void *s1, const void *s2, size_t n);

        


练习:通讯录

        最多记录50个人的通讯录

        姓名、性别、电话

        功能:

                1、添加联系人

                2、按名字删除联系人

                3、按名字修改联系人信息

                4、查找联系人,姓名、电话,支持模糊查找

                5、显示所有联系人信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值