关于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)--格式化的输入与输出的更多相关文章

  1. 听翁恺老师mooc笔记(16)--程序设计与C语言

    问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习 ...

  2. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...

  3. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  4. 听翁恺老师mooc笔记(12)--结构中的结构

    结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100] ...

  5. 听翁恺老师mooc笔记(11)--结构和函数

    结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数, ...

  6. 听翁恺老师mooc笔记(10)--结构

    定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...

  7. 听翁恺老师mooc笔记(9)--枚举

    枚举类型的定义 用符号而不是具体的数字来表示程序中的数字,这么表示的好处是可读性,当别人看你的程序,看到的是单词,很容易理解这些数字背后的含义,那么用什么符号来表示名字哪?需要const int常量的 ...

  8. 听翁恺老师mooc笔记(8)--字符串2

    字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使 ...

  9. 听翁恺老师mooc笔记(7)--字符串1

    C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什 ...

随机推荐

  1. css补充

    (一)水平对齐1.使用margin属性水平对齐可通过将左和右外边距设置为 "auto",来对齐块元素.除非已经声明了 !DOCTYPE,否则使用 margin:auto 在 IE8 ...

  2. CSS3 column属性

    css3 column属性的应用 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta c ...

  3. java实现中文分词

    IK Analyzer是基于lucene实现的分词开源框架 下载路径:http://so.csdn.net/so/search/s.do?q=IKAnalyzer2012.jar&t=doc& ...

  4. Autofac高级用法之动态代理

    前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下称为动态代理)起作用主要是为我们的类生成一个代理类,这个代理类可以在我们调用原本类的方法之前,调 ...

  5. 【BZOJ1996】合唱队(动态规划)

    [BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...

  6. [HNOI2011]XOR和路径

    题面在这里 题意:给定一个无向图,从1号节点出发,每次等概率选择连接该节点的一条边走到另一个节点,到达n号节点时,将走过的路径上的所有边权异或起来,求这个异或和的期望 sol 一道期望大火题(表示看了 ...

  7. [BZOJ4034] [HAOI2015] T2 (树链剖分)

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所 ...

  8. caffe简单介绍

    从四个层次来理解caffe:Blob.Layer.Net.Solver. 1.BlobBlob是caffe基本的数据结构,用四维矩阵 Batch×Channel×Height×Weight表示,存储了 ...

  9. Redis之List

    一.Redis之List简介 1. List是简单的字符串列表,按照插入顺序排列. 2. 一个列表最多可存储232-1个元素(40多亿). 二.Redis之List命令行操作 Lrange:获取列表指 ...

  10. java 流详解

    流在Java中是指计算中流动的缓冲区. 从外部设备流向中央处理器的数据流成为“输入流”,反之成为“输出流”. 字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节:字符流使用了 ...