C语言学习笔记_3基本的标准输入与输出

****2015年12月15日17:14:03

3_基本的标准输入与输出

3-1字符输入与输出

   函数原型:对函数的名称、返回值类型、参数数目、参数类型的说明,规定了函数的语法格式,即函数调用格式

3-1-1字符输出函数putchar

函数原型:
int putchar(int c);
//“int”是指函数返回值的类型,“int c”是int型的参数,是所输出字符的ASCII码。
       调用形式:putchar(c);    //c为实际参数
       执行流程:
        putchar函数将所要输出字符的字符码转换为unsigned char类型并送到标准输出设备中去:
            如果函数正确执行,则返回所输出字符;
            否则,返回EOF(值为-1)。

3-1-2字符输入函数getchar

函数原型:int getchar(void);//void表示函数不需要参数
调用形式:getchar()
执行流程:
1、检查输入流中是否有字符:
若有,则去输入流中的第一个字符作为返回值,程序向后执行;
若没有,getchar函数将进入等待输入状态。
2、用键盘输入字符,按下回车结束,此时输入的字符依次被送入输入流。
3、按下回车的同时会激活处于等待输入状态的getchar函数,getchar每次从输入流读取第一个字符将其值转换为int型作为函数返回值返回,程序继续向后执行
eg:
-----------------------------------------------------------------------------
在键盘上任意输入一个字符,若输入的是小写字母,则输出对应的大写字母,否则直接输出
   char c;
   putchar( (c = getchar())<='z'&& c>='a' ? c-'a'+'A' : c  );
-----------------------------------------------------------------------------

3-2字符串的输入与输出

3-2-1字符串输出函数puts

函数原型:int puts(const char *s);//返回值类型int,参数s是存放所要输出字符串的内存缓冲区的首地址,类型为字符指针
调用形式:puts(s);
执行流程:
puts函数从s所指定的地址读取字符串输出到标准输出设备,并在串尾输出一个换行符
puts函数读取字符串中读取字符直到遇见空字符为止,如果函数正确执行,则返回一个非负整数;否则,返回EOF(值为-1)。

3-2-2字符串输入函数gets

函数原型:
char * gets(char *s);//返回值类型是char *,参数s是一个字符指针,指向存放输入字符串的内存缓冲区的首地址
调用形式:
gets(s);//函数正确执行返回该内存缓冲区的首地址,遇到文件尾或出错返回NULL
执行流程:
从输入流中读取一行字符存放到s指定的内存缓冲区,结尾的换行符被空字符替换,以作为字符串的结束标志

3-3格式化输入与输出

3-3-1输出函数printf

函数原型:int printf (const char *format,……);
//返回值类型为int,是函数调用时实际输出到标准输出设备中的字符个数。第一个形参format是一个字符串,即格式字符串,用于指定输出数据的个数和输出格式
调用形式:printf(格式字符串,数据项1,数据项2,……,数据项n);
格式字符串:
1、组成:  
    普通字符,原样输出,主要输出文字信息;
    转换说明,由%和转换字符组成,之间可以带有域宽说明,用来指明输出时的对齐方向,域宽,小数位数;
    转换字符:
    u     无符号十进制数
    e     标准指数形式的浮点数
    eg:12.00004951      输出      1.20000e+01
    g     在不输出无效零的情况下,按输出域宽度较小的原则从%f和%e两种格式中自动选择
    a     将double型数据以十六进制格式输出
    p     指针值
    %    输出一个%
    特例:
    ----------------------------------
    printf("abc%n",&x);
    printf("x=%d",x);//输出:abcx=3
    ----------------------------------
2、域宽说明:
    -               左对齐        
    +               输出正数前加符号+
    空格             输出的第一个字符不是+或-时要输出一个空格做前缀
    0               在域宽范围内用前导0补齐空位
                    对于o格式x格式,输出前缀0或0x,对于g格式输出时不删除尾部零
    正整数m          指明最小域宽
    “.”             分隔域宽与精度
    正整数n          指明输出精度,小数位数

3-3-2格式化输入字符scanf

函数原型:int scanf(const char *format,……);
    //其他参数是用来存放输入数据的内存地址
调用形式:scanf(格式字符串,输入参数1,2,3……);
    //输入参数为基本类型或者指针类型变量的地址,输入字符串数据参数应该为该字符类型的指针,字符数组名或指向字符数组首元素的指针变量
执行流程:
    从标准输入设备读取字符流;
    按照格式字符串中转换字符所规定的格式转换成相应类型的值;
    存放到输入参数指定的内存单元。
    scanf函数正确执行时,返回值是被转换并赋值的数据的个数;
    遇到文件尾或者出错时返回EOF。
输入形式:
    1、从输入流中当前位置开始,直到其后的第一个空白字符或者直至根据转换说明不能被转换的字符之前,或者直至指定域宽内的所有字符为止
    2、空白符(空格、换行、制表)是输入域的分隔符,每个转换说明,对应一个参数,对应一个输入域
    3、输入时注意事项:
        1)字符串后面是数字时要加空白符(分隔符);
        2)整型浮点型或字符型后面的字符型数据之间不用分隔符,因为转换说明%c不会跳过输入流中的空白字符;
        3)而转换说明%s可以跳过,因为字符串之间必须用空白字符隔开,“%1s”的作用是读取输入流中的一个非空字符
    注意事项:
        1、scanf函数一直等到输入数据个数达到转换说明的个数才开始执行
        2、输入浮点数时,没有小数部分就可以不输入“.0”,也可以用指数形式输入浮点数
        3、转换字符n,即“%n”用于将到达该转换说明为止已经读到的字符数目写到对应指定的内存单元
        4、如果转换说明是%%,那么不从输入流中读取数据,同时,对应参数变量也不将被赋值,对应输入一个%
            int i = 1;
            scanf("%%d",&i);
            printf("i =%d",i);
            //若输入“%100回车”或“100回车”,输出结果为“i = 1”
            ---------------------------------------------------
            int i = 1;
            scanf("%%%d",&i);
            printf("i = %d",i);
            //若输入“%100回车”,输出结果为“i = 100
        5、转换说明要和输入参数一致,如果转换说明的个数比输入参数的个数的多可能造成死机
        6、scanf函数不能输入含有空白字符的字符串,gets函数可以
        7、格式字符串中的其他普通字符,输入时一一对应
        8、关于转换说明中的可选项:
    指定域宽:
        “%3d”表示从输入流中的当前位置指定域宽为3作为实际输入域
        若输入“1234”那么只读取前三个数;
        若输入“1 34”那么读取第一个数;
    修饰转换说明   
        %hd       short
        %ld        long
        %lf         double
        %Lf        long double
        “*”虚读:
        抑制赋值符号,跳过相应输入域
        “%d%*d%d”表示:
        要求输入三个数,第二个数被虚读,其他数正常赋值
        “%*c”可以用于跳过空白字符

你可能感兴趣的:(C)