/3 Day05 标准C语言8

------------------------------------------

输出缓冲区:

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

    才显示出来

        1、遇到\n   (缓冲区内容也会刷新到屏幕上)

        2、程序结束时

        3、遇到输入语句时

        4、当缓冲区满4K时

        5、fflush(stdout)   手动刷新(Linux系统有用)

输入缓冲区:

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

缓冲区机制:

    1、可以提高数据的读写速度

    2、可以让低速的输入输出设备与高速的CPU之间协调工作

缓冲区常见问题:

    1、当需要读取的是整型或者浮点型时,而输入缓冲区中的数据是字符或符号时,

        此时读取会失败,数据会残留在输入缓冲区中,就会影响接下来的所有数据的读取

        解决方法: 借助scanf返回值判断是否接收成功,如果接收过程有失败情况,

                可以先清理输入缓冲区,再重新循环直到接收成功为止

            int a = 0,b = 0,c = 0;

            while(3 > scanf("%d%d%d",&a,&b,&c))

            {

                printf("输入数据有误,请重新输入:");

                stdin->_IO_read_ptr = stdin->_IO_read_end;

            }

            printf("%d%d%d",a,b,c);

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

        必须确认输入缓冲区中有垃圾数据时,才能去读取丢弃输入缓冲区的垃圾数据,

            否则程序会停下来等待缓冲区中有\n

        解决方法一:

            int len = 0;

            while(str[len]) len++;

            if('\n' != str[len-1])

            {   

                scanf("%*[^\n]");   /*表示从缓冲区中接收任意字符并丢弃,

                                        只要不是\n就一直进行,遇到\n才停下*/

                scanf("%*c");       //丢弃任意字符,把\n丢掉

            }

        解决方法二:

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

            (只能在Linux系统下使用)

            stdin->_IO_read_ptr = stdin->_IO_read_end;

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

        会影响字符、字符串的输入

        解决方法: %c前面加空格

            scanf(" %c",&ch)

字符串相关的常用操作: (写函数重构)

    //#include <string.h>    

    

    strlen

        size_t strlen(const char *s);

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

        注意: sizeof 和 strlen 的区别

    strcpy

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

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

        返回值: 返回dest,链式调用

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

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

    

    strcat

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

        功能: 把字符串src追加到dest的后面

        返回值: 返回dest,链式调用

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

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

    strcmp

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

        功能: 比较两个字符串的大小,按照字典序比较,谁在前面谁小,只要比较出结果,

            立即返回,后面的不再比较

        返回值:

            s1 > s2 返回正数

            s1 < s2     返回负数

            s1 == s2    返回0

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

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

(重要)//练习: 自己写函数重构实现strlen\strcpy\strcat\strcmp

    //#include <stdlib.h>

    

    atoi

        int atoi(const char* nptr);

        功能: 字符串转int类型

    atol

        long atol(const char* nptr);

        功能: 字符串转long类型

    atoll

        long long atoll(const char* nptr);

        功能: 字符串转long long类型

    atof

        double atof(const char* nptr);

        功能: 字符串转double类型

    //#include <string.h>

    strstr

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

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

        返回值: needle首次在haystack中首次出现的位置(从出现的位置开始printf),

            如果找不到返回NULL

    strchr

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

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

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

    //#include <stdio.h>

    sprintf(字符串拼接)

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

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

        返回值: 拼接后str的长度(字符长度)

    sscanf(解析字符串)

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

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

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

通讯录:

    记录50个人

    姓名、性别、电话

    功能:

        1、按1添加联系人

        2、按2根据名字删除联系人

        3、按3根据名字修改联系人

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

        5、显示所有联系人信息

上一篇:C语言字符串操作函数


下一篇:bable.js是什么