鱼C论坛

 找回密码
 立即注册
查看: 2068|回复: 0

[技术交流] C语言基础摘要--四、实用标准C I/O

[复制链接]
发表于 2017-7-26 16:56:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 czlhxm 于 2017-7-26 16:56 编辑

本章可能有些许解释错误,请多包含


4.1 标准输出
        printf函数:int printf( const char *format, ... ) ;
        根据给定格式字符串打印字符,返回打印(故不包含字符串结尾\0)的字符数,若给定参数少于格式输出符,那么剩下格式输出的值为随机值。

        实用(用来美化打印数据表格)的格式修饰符:
                1. %4d对应的整型参数若小于4位数,则前面多出的位数补空格,若大于4位数则直接打印。
                2. %5.2f打印对应浮点型参数(包括小数点)的五个字符,其中有两位为小数位,如若参数为3.1415,则打印结果为: 3.14(3前面有个空格)。
                3. %-10d可使对应的整型参数以10位为长度左对齐。
                4. %010d可使对应整型参数若小于10位数,则前面用0而不是空格填充。
                5. % d(d前面有个空格)可使对应的整型参数若为正号则不显示正号而用空格代替,若为负号显示负号。
                6. %+d可使对应的整型参数显示正负号。

        常用printf/scanf格式码:
                    %d 十进制整型    %o 八进制整型      %x 十六进制整型
                    %g 浮点值           %c 打印字符          %s 字符串
                     \n 换行符            \ld 长整型            %f 浮点型
                     %lf 双精度浮点型

        注意:在格式修饰符中还存在一种%*d,*可代表限制的位数的数字,如printf("%*d",width,number) ;其中width代替了如下的数字常量4,使得打印使的宽度可以交由程序动态设置:
实用(用来美化打印数据表格)的格式修饰符:
                1. %4d对应的整型参数若小于4位数,则前面多出的位数补空格,若大于4位数则直接打印。
                 ......


        printf参数传递机制(注意):根据格式串中对应格式符对应的数据大小读取,那么在printf("%ld%ld",n1,n2) ;中假如n1占8个字节,而%ld只读取4个字节,printf将打印n1的前4个字节表示的数字和n1后4个字节表示的数字,n2将完全不起作用!所以注意传参时的数据类型转换。

        如果你要打印的字符串很长,在代码编辑器里显得不好看,可以采用以下方式书写:
  1. printf("一段字符"
  2.         "一段字符"
  3.         "一段字符") ;
复制代码


/*--------------------------------------------------------我是分割线------------------------------------------------------*/
        putchar函数:int putchar( int ch ) ;
        打印一个给定的字符,成功返回被打印字符,失败返回EOF。
/*--------------------------------------------------------我是分割线------------------------------------------------------*/
        puts函数:int puts(const char *string);
        打印字符串并换行,成功返回非负数,失败返回EOF。


4.2 标准输入
        scanf函数:int scanf( const char *format, ... );
        根据给定格式字符串读取输入数据,返回成功赋值的参数个数,出错返回EOF。

        实用的格式修饰符:
                %4d使读入对应的整数只取前4位,如scanf("%4d", &a) ;输入54321 ,a的值为5432。

        注意
                1. scanf读取由任意制表符、空格、换行分隔开的数据,但格式符为%c时例外因为空格也算作字符。
                2.scanf中修饰符*可起到如printf中相同作用:
        注意:在格式修饰符中还存在一种%*d,*可代表限制的位数的数字,如printf("%*d",width,number) ;其中width代替了如下的数字常量4,使得打印使的宽度可以交由程序动态设置
        ......


/*--------------------------------------------------------我是分割线------------------------------------------------------*/
        getchar函数:int getchar( void ) ;
        从标准输入中获取一个字符,返回获取字符。
/*--------------------------------------------------------我是分割线------------------------------------------------------*/
        getch函数:int getch( void ) ;
        从标准输入中获取一个字符,返回获取字符。同getchar字符的区别是,getch获取字符不会在窗口显示,同时也不需要同getchar输入数据回车后才获取字符,故getch常用于控制台程序中简单的获取键盘输入。

        如在控制台贪吃蛇中获取用户键盘输入的一种实现方法:
  1. if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0  
  2.         {   
  3.         while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主  
  4.         value = getch(); //将按键从控制台中取出并保存到key中
  5.         }
复制代码

/*--------------------------------------------------------我是分割线------------------------------------------------------*/
        gets函数:char*gets( char*buffer ) ;
        读取一串字符,遇到换行或到达EOF,丢弃换行符并于末尾添加\0,返回参数buffer的指针,注意buffer大小要确保足够接收输入的字符否则会溢出。

4.3 缓冲区
        缓冲区是标准输入输出的枢纽,如果说输入输出函数是食材与佳肴的流入流出,那么缓冲区就是厨房。
        缓冲区是内存中的一片区域,有默认大小,用于输入和输出数据。缓冲区的存在使得字符数据以块的形式处理(更高效)。

        输入回显:当你输入一个字符时在控制台中可观察到。

        非缓冲输入:输入的内容对程序来说立即可用如:在游戏中按下某键就执行、getch函数。

        缓冲输入:输入的内容先在缓冲区中等待特定信号(如回车),再交由程序调用,如在输入中输入错误可反复修改,正确后再交给程序。

        缓冲输入又分为完全缓冲行缓冲:完全缓冲指填满缓冲区后再进行处理,行缓冲指遇到换行符时进行处理。
4.4 给读者朋友的话(实属废话可忽略)
        既然你读到这儿了,或者是跳到这儿了,请君悉听一席话:

        C语言的输入输出(控制台)是一个很重要的知识点,以上仅为一些重点要点,因为参考的是百度、C参考手册、C primer plus所以篇幅略长但也许还是会漏掉一些知识点,请见谅。为什么要学那么深,输入输出不就是printf和scanf就了么?因为更为复杂又高效的程序远不止这两条函数就能解决,就如笔者曾遇到的编写贪吃蛇问题,如果不是知道了getch的非回显和非缓冲,就可能得调用复杂的win api处理实现接收按键的功能。在c primer plus还举出很多例子如一边读取一边抛弃特定的字符等等,这就需要用输出输入实现更复杂的算法。同时在需要输出并换行使用puts,输出单字符使用putchar能使程序更加简洁高效。希望我的学习笔记能尽量帮助诸位留心在学习和实际使用C基础中的细节,同时也希望诸位不要局限于文章的篇幅而漏掉了文章忽略的知识点。


       

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表