听翁恺老师mooc笔记(14)--格式化的输入与输出
关于C语言如何做文件和底层操作:
文件操作,从根本上说,和C语言无关。这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作。你需要理解,我们在这部分所学习的,是函数库的使用,而非C语言。顺便我们还学习了很多和计算机相关的知识,比如重定向、文本文件和二进制文件的江湖恩怨。但是既然不是C语言,也就意味着你将来的工业环境下,未必还会使用这么原始的文件操作函数了。这些函数,只是一个标本,让你知道可以这样来操纵文件。但是,不见得所有的库都是以这样的方式来操纵文件的。
围绕文件操作,还有一个C语言受时代局限,处理得不够好的东西,就是错误处理。因为文件操作的每一个步骤都很可能在实行过程中遇到问题:文件打不开啦,读了一半出错啦,等等等等,所以设计文件操作函数如何反馈和处理这类运行时刻的问题是需要很好的手段的。C的这个函数库,主要是通过特殊的返回值来实现的。后来的语言,如C++和Java,则引入了异常机制来处理这些事情。
关于底层操作,我们主要是介绍了按位操作,包括按位的运算、移位和位段。这些操作在日常程序中难得遇到,主要是用于接触硬件的底层程序的。这些内容在本课程是选读的。
格式化的输入输出
printf和scanf在第一节课就学过,进行输入与输出,在使用这两个函数时,使用%后加字母来表示输出格式,比如%d表示整数的输出格式,那么其实在%和d之间还可以加入一些东西,下面研究下该格式字符串的详细细节:
printf
[flags]
%[flags][width][.prec][hlL]type
在%和type(d等)之间还可以有4样东西,其中flags标号有四种内容,flags和width是一伙的,做程序一起讲解下:

flags=-
#include <stdio.h>
int main(int argc,char const *argv[]){
printf("%9d\n",123); //9的意思是数据的输出占据9个字符的空间,是右对齐的
printf("%-9d\n",123); //减号的意思是左对齐
}
运行结果如下,数一下在123前面有6个字符:
123
123
--------------------------------
Process exited after 0.006233 seconds with return value 10
请按任意键继续. . .
flags=+
减号的意思是左对齐,flags=+,加号的意思是在前面放+或者-,修改上述程序:
#include <stdio.h>
int main(int argc,char const *argv[]){
printf("%+9d\n",123);
printf("%+-9d\n",123); //又有+,又左对齐。写成%-+9d结果是一致的
}
输出结果为:
+123
+123
--------------------------------
Process exited after 0.00621 seconds with return value 10
请按任意键继续. . .
flags=0,意思是0填充:
#include <stdio.h>
int main(int argc,char const *argv[]){
printf("%09d\n",123);
printf("%0-9d\n",123);
}
运行结果如下,可以看出第一个printf填充了0,但是第二个没用填充,所以0和-是同时使用,有效的是-。
000000123
123
--------------------------------
Process exited after 0.006748 seconds with return value 10
请按任意键继续. . .
[width][.prec]:

####.prec=.2
```
#include
int main(int argc,char const *argv[]){
printf("%9.2f\n",123.0);
}
运行结果如下:
123.00
Process exited after 0.006753 seconds with return value 10
请按任意键继续. . .
从结果可以看出9并不是小数点前有9位,而是整个数据占据9个字符,.2是说小数点后有两位。
####width=*
include <stdio.h>
int main(int argc,char const argv[]){
printf("%9.2f\n",123.0);
printf("%d\n",6,123);//号意思是后面的6是填充到所在位置,也就是数组整个占据6个字符,那么此处的6也可以替换为变量len,比如可写成
//printf("%*d\n",len,123);这样可对输出格式进行扩展。
}
运行结果如下:
123.00
123
Process exited after 0.01804 seconds with return value 7
请按任意键继续. . .
###[hlL]修饰符,修饰类型type
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329112403983-246551374.png" width = "50%" />
####hlL=hh
hlL=hh是当作单个字节来输出,例如:
include <stdio.h>
int main(int argc,char const *argv[]){
printf("%hhd\n",(char)12345);
}
输出结果是57,将12345的低位作为char输出,并将该char转换为10进制整数结果就是57.(12345的16进制结果是3039,将0x39转换为十进制为57)
###type
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329112528420-57328523.png" width = "60%" />
##scanf
scanf相对printf简单一些,scanf:%[flags]type,只有flags和type两个参数,涉及到每个选项可以做实验测试,
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329114723561-1630781252.png" width = "60%" />
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329114803092-1306271511.png" width = "60%" />
听翁恺老师mooc笔记(14)--格式化的输入与输出的更多相关文章
- 听翁恺老师mooc笔记(16)--程序设计与C语言
问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习 ...
- 听翁恺老师mooc笔记(15)--文件的输入与输出
<>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...
- 听翁恺老师mooc笔记(13)--类型定义和联合
typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...
- 听翁恺老师mooc笔记(12)--结构中的结构
结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100] ...
- 听翁恺老师mooc笔记(11)--结构和函数
结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数, ...
- 听翁恺老师mooc笔记(10)--结构
定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...
- 听翁恺老师mooc笔记(9)--枚举
枚举类型的定义 用符号而不是具体的数字来表示程序中的数字,这么表示的好处是可读性,当别人看你的程序,看到的是单词,很容易理解这些数字背后的含义,那么用什么符号来表示名字哪?需要const int常量的 ...
- 听翁恺老师mooc笔记(8)--字符串2
字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使 ...
- 听翁恺老师mooc笔记(7)--字符串1
C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什 ...
随机推荐
- Centos运行Mysql因为内存不足进程被杀
今天刚刚申请了一个新的域名,在申请完域名刚准备绑定给小伙伴分享注册新域名的喜悦时,刚把网站发到我们小伙伴们的讨论群里,却发现访问不了了,提示,数据库连接失败! 真的时一个尴尬..... 所有人都 ...
- MFC,ADO方式实现数据库操作
参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError ...
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.Action.RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传.而Partial.RenderPa ...
- C#隐式转换和显示转换举例--C#基础
高精度的数据类型转换为低精度的数据类型是显示转换,低精度的转换为高精度的是隐式转换. 温馨提示:不能说强制类型转换是从低精度到高精度. int a=666;float b=(float)a: 由a到b ...
- 【BZOJ2428】均分数据(模拟退火)
[BZOJ2428]均分数据(模拟退火) 题面 BZOJ 题解 先说说黄学长的做法: 当温度比较高的时候,贪心 每次随机一个数,把他放进当前和最少的那一组里面 温度足够低的时候就完全随机然后转移 这样 ...
- tp5 提升性能的几个方法
原文:http://www.upwqy.com/details/27.html 首先说明 如果是linux 或者是Mac,需要给予权限才能操作 以下方法建议,在网站稳定后再生成上传. 1 生成路由缓存 ...
- php 目录处理函数
之前我们处理的全都是文件,那目录和文件夹怎么处理呢? 我们就来学习目录或者称为文件夹的处理相关函数. 处理文件夹的基本思想如下: 1.读取某个路径的时候判断是否是文件夹 2.是文件夹的话,打开指定文件 ...
- 完整的站内搜索实战应用(Lucene.Net+盘古分词)
首先自问自答几个问题,以让各位看官了解写此文的目的 什么是站内搜索?与一般搜索的区别? 多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索". ...
- MongoDB 桌面管理器MongoVUE
MongoVUE是一个桌面GUI工具,专用于Windows平台,它有一个简洁.清爽的界面,它的基本功能是免费的.它可以以文本视图.树视图.表格视图来显示MongoDB的数据.还可以保持查询的结果供以后 ...
- windows中安装redis
Redis是有名的NoSql数据库,一般Linux都会默认支持.但在Windows环境中, Windows的Redis安装包需要到以下GitHub链接找到.链接:https://github.com/ ...