听翁恺老师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语言的字符串长什 ...
随机推荐
- 学习笔记:webpack深入与实践(一)
一.webpack基本介绍 webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 四个核心概念: 入口(entry):指示 webpack 应该 ...
- class-k近邻算法kNN
1 k近邻算法2 模型2.1 距离测量2.2 k值选择2.3 分类决策规则3 kNN的实现--kd树3.1 构造kd树3.2 kd树搜索 1 k近邻算法 k nearest neighbor,k-NN ...
- C# 获取一个独一无二的字符串 GUID
在保存文件,创建目录时,为了保证名称不重复,经常使用Random产生一个随机数,有更简单且不会重复的办法是: Guid.NewGuid().ToString() 就会生成一个类似 37c1acec-4 ...
- 页面jquery调试的一个宝贵经验(类似于Eclipse中的写出一个对象点它的方法时候用alt加/可以跳出来它所有的方法)
案例讲解 一,html片段 <div class="page-upload"> <div class="tab-wrapper2"> & ...
- Linux之网络管理
一.网络基础 1)ISO/OSI七层模型简介 ISO:国际标准化组织 OSI:开放系统互联模型 IOS:苹果操作系统(在计算机网络中,IOS是互联网操作系统,是思科公司为其网络设备开发的操作维护系统) ...
- CSS实现网页背景图片自适应全屏
一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形 ...
- 描述下@Component,@Repository,@Service,@Scope,@Autowired,@Inject,@Value标记的作用
1.@Component为通用注解. 2.@Repository为持久层组件注解. 3.@Service为业务层组件注解. 4.@Scope为Bean的作用域注解. 5.@Autowired,@Inj ...
- 关系型数据库工作原理-SQL解析(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
- 2018第一波iOS经典笔试题(现场实拍)
序言 作为一个开发者,眼里不仅仅只存在于那一行又一行的代码,更还有那诗和远方. 注明:面试是对自我审视的一种过程,面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正 ...
- c#开发wps插件(3)部署
上一篇,我们完成了具体的开发工作,但是最终必须得部署到客户机器上.所以,部署方面,我花费了一些时间去研究,现在总结下.上一篇中,我为什么建议开发人员安装wps专业版呢?因为装了专业版,方便我们开发,安 ...